Background and Introduction

Value-at-risk modeling, or VaR, is a commonly used tool to measure riskiness in a financial institution. CAViaR was a new take on risk modeling originally proposed by Robert Engle and Simone Manganelli in 2004 which builds upon the literature of modeling regression quantiles in settings which are essential.

and agree with the basic premise of the CAViaR paper that many of the nonparametric historical simulation methods don’t have attractive statistical properties and are chosen more for experimental qualities (an example of this in the 1998 paper by Boudoukh, Richardson, and Whitelaw cited by Engle which uses a semiparametric “hybrid” approach) I think trying to think too narrowly about VaR isn’t a very interesting statistical problem - in a sense, VaR is just a useful summarization of quantile risk put into dollar figures for easy consumption In my opinion, the most interesting question in the CAViaR paper isn’t VaR per se, it’s testing their theorems under relaxations of their assumptions to better understand their approach to extreme value theory. In particular, the following analyses catch my eye: How important is the assumption C2 on page 374 of the CAVIAR paper (which underlies Theorem 1 about the consistency of the estimator beta hat)? It states that “conditional on all of the past information…the error terms form a stationary process”. It may be an interesting test to see how much nonstationarity affects the consistency of the estimator beta hat. I could do this via simulation and see if there’s a lot of value here, which may lead us to a more fundamental result. In my opinion, theorems 4 and 5 (p. 371) are the most important in the paper because they state that the DQ_IS and DQ_OOS quantities are pivotals asymptotically. But it begs the question of how much does that matter, especially in the context of VaR, which in all likelihood is working with limited data? Therefore, it seems to me that the DQ8 and DQ9 assumptions are the shakiest assumptions required for theorem 5. It might be interesting to see how far off from a chi-squared distribution real-world data actually is. This may allow us to develop “rules of thumb” about the accuracy of these asymptotic distributions.

Methods Used

Fill in.

Data Used

Results

CODE

Libraries

package ‘data.table’ was built under R version 3.5.2data.table 1.12.2 using 1 threads (see ?getDTthreads).  Latest news: r-datatable.com
package ‘quantmod’ was built under R version 3.5.2Loading required package: xts
Loading required package: zoo
package ‘zoo’ was built under R version 3.5.2
Attaching package: ‘zoo’

The following objects are masked from ‘package:base’:

    as.Date, as.Date.numeric


Attaching package: ‘xts’

The following objects are masked from ‘package:data.table’:

    first, last

Loading required package: TTR
Version 0.4-0 included new data defaults. See ?getSymbols.
package ‘ggplot2’ was built under R version 3.5.2Need help getting started? Try the cookbook for R: http://www.cookbook-r.com/Graphs/
package ‘tseries’ was built under R version 3.5.2
    ‘tseries’ version: 0.10-47

    ‘tseries’ is a package for time series analysis and computational finance.

    See ‘library(help="tseries")’ for details.

package ‘dplyr’ was built under R version 3.5.2
Attaching package: ‘dplyr’

The following objects are masked from ‘package:xts’:

    first, last

The following objects are masked from ‘package:data.table’:

    between, first, last

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union

package ‘kableExtra’ was built under R version 3.5.2
Attaching package: ‘kableExtra’

The following object is masked from ‘package:dplyr’:

    group_rows

package ‘quantreg’ was built under R version 3.5.2Loading required package: SparseM

Attaching package: ‘SparseM’

The following object is masked from ‘package:base’:

    backsolve


Attaching package: ‘MTS’

The following object is masked from ‘package:TTR’:

    VMA

package ‘plot3D’ was built under R version 3.5.2Loading required package: Rcpp
package ‘Rcpp’ was built under R version 3.5.2The working directory was changed to /Users/stevenmoen/Documents/GitHub/CAViaR inside a notebook chunk. The working directory will be reset when the chunk is finished running. Use the knitr root.dir option in the setup chunk to change the working directory for notebook chunks.

Univariate CAViaR Section

MV Caviar - Pulling the data

MV Caviar - Modified DI code

The code that is used in a diffusion index model is as follows. The key is figuring out where to make the extension. I’ll go through and comment everything and see what’s what.

Now that we have the function, let’s see if we can get it to work. First, we’ll need to compile all of our data

Let’s add a code which incorporates the previous values of the return.

MV Caviar - Calcuating losses

MV Caviar - Choosing the optimal number of predictors

MV Caviar - Running the univariate model multiple times

MV Caviar - Plotting function

MV Caviar - Old Loss Test Function

MV Caviar - A generalized loss calculation function

MV Caviar - Tables function

Export function

Big Simulation Function

Sector ETFs as Explanatory Variables

Here’s what I’m thinking.

Lowest level: 1%, 5%, 10% VaR Next, 2008, 2010, 2014, or 2016 Highest - ETF choices 3 x 4 x 5 = 60 runs

Importing and Running Datasets

Problem Solving on 4.29.2020

preserve101dbcc2fbd4a0e7

2008 Ending

U.S. ETFs

[[1]]
                     SPY           M1            M2            M3           M4           M5           M6
2008-01-04 -0.0248118342 -0.009008995 -0.0114038250 -6.506809e-03 -0.009785113 -0.010686294 -0.013024402
2008-01-07 -0.0008496457 -0.010368632 -0.0084263336 -2.036757e-03 -0.012744013 -0.013228876 -0.015812464
2008-01-08 -0.0162801552 -0.008802236 -0.0086991683 -2.789016e-03 -0.007451870 -0.012261209 -0.015326785
2008-01-09  0.0104552682 -0.010007454 -0.0116292656 -3.989046e-03 -0.014165540 -0.013124694 -0.017075181
2008-01-10  0.0065326791 -0.008237012 -0.0120536801 -6.577309e-03 -0.008756820 -0.013242877 -0.015986706
2008-01-11 -0.0081012617 -0.008609990 -0.0129927437 -9.762320e-03 -0.010171014 -0.012909533 -0.015305373
2008-01-14  0.0080307055 -0.009693916 -0.0103604940 -7.036558e-03 -0.008039063 -0.012787766 -0.015566701
2008-01-15 -0.0222590643 -0.008431257 -0.0107313252 -8.410308e-03 -0.009426473 -0.012671248 -0.014813285
2008-01-16 -0.0086497429 -0.010423230 -0.0110791278 -3.437999e-03 -0.010803258 -0.014159012 -0.017416000
2008-01-17 -0.0262580047 -0.009571017 -0.0132299493 -4.863722e-04 -0.009079987 -0.013963194 -0.017824470
2008-01-18 -0.0103207892 -0.010797726 -0.0190338918  5.987178e-04 -0.015159761 -0.015882524 -0.020399415
2008-01-22 -0.0101983469 -0.009605623 -0.0155451810 -1.908073e-03 -0.010131788 -0.015742488 -0.020891064
2008-01-23  0.0237370019 -0.009639679 -0.0163684113 -2.596526e-03 -0.013168828 -0.015603659 -0.021346177
2008-01-24  0.0084061146 -0.007409178 -0.0100474056 -1.010362e-02 -0.008638127 -0.016862082 -0.019755462
2008-01-25 -0.0145510127 -0.008840543 -0.0091431102 -1.341522e-02 -0.011004540 -0.016446659 -0.018817161
2008-01-28  0.0164012399 -0.009938185 -0.0081656547 -6.081848e-03 -0.006816994 -0.016688862 -0.019830912
2008-01-29  0.0049417741 -0.007968071 -0.0092892564 -8.738580e-03 -0.008070188 -0.016659563 -0.018466167
2008-01-30 -0.0073848272 -0.008596855 -0.0110532525 -1.079707e-02 -0.010106749 -0.015914871 -0.017531569
2008-01-31  0.0180699420 -0.009524466 -0.0111233920 -6.712125e-03 -0.006772641 -0.015467599 -0.017740087
2008-02-01  0.0159598414 -0.007756630 -0.0152328258 -8.498832e-03 -0.008319582 -0.016061234 -0.016506717
2008-02-04 -0.0126893053 -0.007936975 -0.0085145294 -1.405719e-02 -0.008129413 -0.016447785 -0.015447268
2008-02-05 -0.0271387661 -0.009637700 -0.0042830575 -7.857168e-03 -0.007084066 -0.016433787 -0.016184237
2008-02-06 -0.0080845276 -0.010811106 -0.0068349665  7.617532e-04 -0.011078908 -0.018386887 -0.019267574
2008-02-07  0.0065919871 -0.009410725 -0.0120956639 -1.257335e-03 -0.010130019 -0.017777008 -0.019521060
2008-02-08 -0.0064417940 -0.008615910 -0.0130952735 -7.442815e-03 -0.013198425 -0.017107892 -0.018660927
2008-02-11  0.0050966925 -0.009368441 -0.0088169211 -8.079318e-03 -0.008651630 -0.016271395 -0.018678827
2008-02-12  0.0092287560 -0.008610177 -0.0109754180 -7.887713e-03 -0.009837578 -0.015521003 -0.017964212
2008-02-13  0.0101709979 -0.008206896 -0.0072899663 -9.499480e-03 -0.007667360 -0.015309504 -0.016976154
2008-02-14 -0.0088387495 -0.008662643 -0.0034199380 -1.133014e-02 -0.008718016 -0.015189963 -0.016101563
2008-02-15 -0.0002217737 -0.009865055 -0.0076506907 -7.386325e-03 -0.008853091 -0.014863200 -0.016581009
2008-02-19  0.0028078397 -0.008752311 -0.0125648537 -5.889297e-03 -0.007606921 -0.013850842 -0.015870568
2008-02-20  0.0029473150 -0.008657089 -0.0133507941 -8.341232e-03 -0.011259223 -0.013174020 -0.015211847
2008-02-21 -0.0083486448 -0.008957609 -0.0103648493 -9.189042e-03 -0.008675011 -0.012572280 -0.014788114
2008-02-22  0.0061388665 -0.009812979 -0.0104726336 -5.365208e-03 -0.009118869 -0.012533072 -0.015092339
2008-02-25  0.0125298205 -0.008249017 -0.0091615346 -7.087356e-03 -0.009119955 -0.012338920 -0.014073229
2008-02-26  0.0074727484 -0.008427043 -0.0075540555 -1.159413e-02 -0.008898289 -0.012553822 -0.013206034
2008-02-27 -0.0010126331 -0.008564273 -0.0050563357 -1.122542e-02 -0.008244339 -0.012387555 -0.012569861
2008-02-28 -0.0098152362 -0.009300350 -0.0077330765 -7.676311e-03 -0.007159259 -0.011563377 -0.012209050
2008-02-29 -0.0225356856 -0.009715207 -0.0102540059 -6.336050e-03 -0.010606640 -0.011578654 -0.012929035
2008-03-03 -0.0023943356 -0.010715271 -0.0111511634 -9.231015e-04 -0.012602247 -0.013532766 -0.015487476
2008-03-04 -0.0038274278 -0.008661862 -0.0104759316 -3.681841e-03 -0.008118783 -0.012883603 -0.015135024
2008-03-05  0.0062962527 -0.009268762 -0.0131507287 -5.814803e-03 -0.012469017 -0.012393577 -0.015009980
2008-03-06 -0.0209151448 -0.008661525 -0.0123276509 -8.934318e-03 -0.010592554 -0.012188990 -0.014381744
2008-03-07 -0.0103537085 -0.010299790 -0.0086824929 -4.105654e-03 -0.009922167 -0.013505074 -0.016389464
2008-03-10 -0.0132709532 -0.009772380 -0.0094145094 -1.133176e-03 -0.009855150 -0.013499995 -0.016842926
2008-03-11  0.0353069013 -0.010005542 -0.0120210470 -3.596715e-03 -0.013439784 -0.013914770 -0.017662398
2008-03-12 -0.0093956541 -0.006829697 -0.0127647007 -1.320668e-02 -0.007568566 -0.016112226 -0.016026370
2008-03-13  0.0022053488 -0.009469711 -0.0110452077 -1.015872e-02 -0.010840656 -0.015925810 -0.016692753
2008-03-14 -0.0156173232 -0.008764945 -0.0117671308 -6.925152e-03 -0.006525839 -0.015038615 -0.015915603
2008-03-17 -0.0101584795 -0.010165074 -0.0106106051 -4.986029e-03 -0.010365173 -0.015527647 -0.016990939
2008-03-18  0.0407036536 -0.009689853 -0.0100672542 -2.156171e-03 -0.010372163 -0.015435997 -0.017565805
2008-03-19 -0.0250818491 -0.006388991 -0.0115073692 -1.344860e-02 -0.007394236 -0.018002278 -0.015977974
2008-03-20  0.0183532925 -0.010703682 -0.0130045908 -6.288316e-03 -0.013397510 -0.019140476 -0.018224565
2008-03-24  0.0197907260 -0.007990610 -0.0115022698 -6.146751e-03 -0.003903936 -0.019455168 -0.017238085
2008-03-25  0.0009646820 -0.007668727 -0.0071201631 -1.364887e-02 -0.009708333 -0.019897626 -0.016245206
2008-03-26 -0.0123112882 -0.008810584  0.0023141238 -1.092103e-02 -0.007429743 -0.018593554 -0.015636550
2008-03-27 -0.0031585591 -0.009770029 -0.0096555770 -6.661349e-03 -0.006549194 -0.018452294 -0.016355351
2008-03-28 -0.0096105193 -0.009253123 -0.0122075248 -4.873192e-03 -0.009866858 -0.017527668 -0.016131034
2008-03-31  0.0034917825 -0.009585075 -0.0118099038 -4.965288e-03 -0.011753099 -0.017234291 -0.016584202
2008-04-01  0.0345554764 -0.008756104 -0.0103472125 -6.900763e-03 -0.010462100 -0.016432530 -0.015958550
2008-04-02  0.0006585635 -0.007054069 -0.0065405357 -1.469148e-02 -0.006322901 -0.018388134 -0.014550503
2008-04-03  0.0024843280 -0.008789507 -0.0067383411 -1.330204e-02 -0.009872383 -0.017250829 -0.014061347
2008-04-04 -0.0010953896 -0.008983872 -0.0016709888 -8.258529e-03 -0.005174838 -0.016243034 -0.013571593
2008-04-07  0.0005112351 -0.008900336 -0.0037977186 -7.449499e-03 -0.007051658 -0.015190037 -0.013253338
2008-04-08 -0.0010226662 -0.009014350 -0.0081290029 -7.418208e-03 -0.011513767 -0.014217090 -0.012521856
2008-04-09 -0.0072621323 -0.009069519 -0.0119318420 -8.003548e-03 -0.006990304 -0.013348262 -0.012269086
2008-04-10  0.0013979696 -0.009679355 -0.0131530340 -6.495937e-03 -0.011522222 -0.012815686 -0.012687296
2008-04-11 -0.0195997100 -0.008818423 -0.0106663172 -5.822471e-03 -0.010361064 -0.012091436 -0.012281908
2008-04-14 -0.0033793720 -0.010182540 -0.0069344720 -4.095752e-03 -0.009812502 -0.013736268 -0.014432368
2008-04-15  0.0023291752 -0.009286144 -0.0066675930 -4.648167e-03 -0.009524887 -0.013194505 -0.014278900
2008-04-16  0.0267334733 -0.008735598 -0.0112287777 -7.427651e-03 -0.012586346 -0.012603576 -0.013725831
2008-04-17  0.0014600779 -0.007466123 -0.0094122855 -1.407224e-02 -0.006202972 -0.014175774 -0.012662022
2008-04-18  0.0103804298 -0.009032809 -0.0073928352 -1.171313e-02 -0.010433456 -0.013305582 -0.012238908
2008-04-21  0.0005051632 -0.008196470 -0.0059049694 -9.395215e-03 -0.004292174 -0.013326750 -0.011350304
2008-04-22 -0.0044122300 -0.009124997 -0.0075596071 -9.329673e-03 -0.009906278 -0.012530893 -0.011029920
2008-04-23 -0.0015963935 -0.009654872 -0.0097764786 -7.384091e-03 -0.007902490 -0.012151335 -0.011208449
2008-04-24  0.0043473397 -0.009034157 -0.0108286996 -5.648843e-03 -0.009764405 -0.011493195 -0.011082639
2008-04-25  0.0092113415 -0.008645427 -0.0134112793 -6.253240e-03 -0.010745012 -0.010918111 -0.010679179
2008-04-28  0.0002150994 -0.008467068 -0.0089681018 -1.039274e-02 -0.007867665 -0.011103574 -0.010157694
2008-04-29 -0.0039467796 -0.008933061 -0.0056142597 -8.173139e-03 -0.008876406 -0.010417474 -0.009899896
2008-04-30 -0.0059136301 -0.009396057 -0.0045445344 -5.854553e-03 -0.007250070 -0.010147353 -0.010065905
2008-05-01  0.0204743354 -0.009647983 -0.0093389533 -6.869330e-03 -0.011413316 -0.010088066 -0.010444978
2008-05-02  0.0027600366 -0.007635783 -0.0073064619 -8.041400e-03 -0.008557196 -0.011191943 -0.009679979
2008-05-05 -0.0048171655 -0.008737952 -0.0076116895 -1.193308e-02 -0.009561398 -0.010673187 -0.009381876
2008-05-06  0.0086260700 -0.009273423 -0.0086225189 -7.468741e-03 -0.005587270 -0.010434391 -0.009531474
2008-05-07 -0.0179713227 -0.008601222 -0.0093840212 -8.949787e-03 -0.010625991 -0.010619777 -0.009070932
2008-05-08 -0.0025837062 -0.010129929 -0.0065284720 -4.985588e-03 -0.009857324 -0.011898293 -0.010978453
2008-05-09 -0.0018699025 -0.008931359 -0.0082239227 -4.761851e-03 -0.007696242 -0.011370878 -0.010955332
2008-05-12  0.0111686003 -0.009284553 -0.0134015989 -6.824563e-03 -0.012118641 -0.010825458 -0.010850475
2008-05-13  0.0001424174 -0.008144653 -0.0099090503 -8.522933e-03 -0.009474034 -0.011185751 -0.010299525
2008-05-14  0.0020618202 -0.009043985 -0.0084488040 -9.835671e-03 -0.009355268 -0.010446242 -0.010023421
2008-05-15  0.0124255030 -0.008714788 -0.0046449225 -6.969332e-03 -0.007054251 -0.009822970 -0.009716711
2008-05-16  0.0009117828 -0.008468629 -0.0085913564 -1.027173e-02 -0.008504347 -0.010463808 -0.009197119
2008-05-19  0.0027300754 -0.008876867 -0.0069908722 -1.075360e-02 -0.009192716 -0.009807669 -0.008960367
2008-05-20 -0.0081422442 -0.008751969 -0.0076908499 -8.065270e-03 -0.007113497 -0.009441795 -0.008691880
2008-05-21 -0.0170593399 -0.009664896 -0.0129163904 -7.651344e-03 -0.008884352 -0.009677833 -0.009343417
2008-05-22  0.0001434719 -0.010191092 -0.0108505800 -2.939370e-03 -0.011730527 -0.010917471 -0.011026874
2008-05-23 -0.0134949236 -0.008834264 -0.0109120649 -3.780096e-03 -0.010653744 -0.010244604 -0.010709778
2008-05-27  0.0073832283 -0.009829299 -0.0101715399 -4.262240e-03 -0.010282362 -0.010930029 -0.011876182
2008-05-28  0.0046050538 -0.008655302 -0.0119377833 -6.275858e-03 -0.010561451 -0.010945754 -0.011354743
2008-05-29  0.0050126405 -0.008729524 -0.0093534639 -1.022954e-02 -0.009905164 -0.010696934 -0.010927395
2008-05-30  0.0024965093 -0.008469196 -0.0050385378 -7.269173e-03 -0.007195174 -0.010477758 -0.010512823
2008-06-02 -0.0103845953 -0.009028096 -0.0085846550 -8.877645e-03 -0.009105794 -0.010067573 -0.010172302
2008-06-03 -0.0058486286 -0.009674288 -0.0090114624 -6.303002e-03 -0.008237972 -0.010536006 -0.011076615
2008-06-04 -0.0005071990 -0.009108791 -0.0113517204 -3.282676e-03 -0.009120079 -0.010448435 -0.011418657
2008-06-05  0.0197999656 -0.009038541 -0.0140747752 -6.088543e-03 -0.010380395 -0.009867967 -0.011151951
2008-06-06 -0.0324135219 -0.007921051 -0.0114746838 -1.266514e-02 -0.009906518 -0.011123198 -0.010357913
2008-06-09  0.0024184013 -0.011258927 -0.0114033270 -4.660554e-03 -0.012337918 -0.013388159 -0.013617947
2008-06-10 -0.0049897990 -0.008768479 -0.0097804247 -4.280059e-03 -0.007209819 -0.012800199 -0.013151571
2008-06-11 -0.0148216573 -0.009287020 -0.0100541328 -5.866447e-03 -0.011190394 -0.012478084 -0.013289827
2008-06-12  0.0038006245 -0.010017039 -0.0095581533 -4.632764e-03 -0.011559032 -0.013022082 -0.014746910
                    M7          M8
2008-01-04 -0.01106787 -0.01002831
2008-01-07 -0.01337510 -0.01009095
2008-01-08 -0.01281398 -0.01011362
2008-01-09 -0.01328459 -0.01037225
2008-01-10 -0.01313312 -0.01033621
2008-01-11 -0.01274700 -0.01003977
2008-01-14 -0.01247925 -0.01003002
2008-01-15 -0.01222984 -0.01002333
2008-01-16 -0.01370327 -0.01033608
2008-01-17 -0.01341766 -0.01029021
2008-01-18 -0.01581681 -0.01049074
2008-01-22 -0.01534156 -0.01050162
2008-01-23 -0.01508860 -0.01052314
2008-01-24 -0.01614248 -0.01052334
2008-01-25 -0.01549864 -0.01048218
2008-01-28 -0.01551913 -0.01086290
2008-01-29 -0.01562666 -0.01087487
2008-01-30 -0.01490531 -0.01087535
2008-01-31 -0.01446217 -0.01084328
2008-02-01 -0.01491178 -0.01086248
2008-02-04 -0.01509242 -0.01053754
2008-02-05 -0.01497007 -0.01075964
2008-02-06 -0.01729184 -0.01088540
2008-02-07 -0.01661554 -0.01086917
2008-02-08 -0.01609005 -0.01088838
2008-02-11 -0.01564079 -0.01053919
2008-02-12 -0.01510702 -0.01050788
2008-02-13 -0.01481249 -0.01052990
2008-02-14 -0.01438782 -0.01050928
2008-02-15 -0.01365206 -0.01043245
2008-02-19 -0.01310742 -0.01042488
2008-02-20 -0.01272853 -0.01030622
2008-02-21 -0.01226457 -0.01035170
2008-02-22 -0.01204527 -0.01035296
2008-02-25 -0.01172091 -0.01033177
2008-02-26 -0.01187468 -0.01029768
2008-02-27 -0.01166039 -0.01033426
2008-02-28 -0.01124187 -0.01029673
2008-02-29 -0.01118355 -0.01029744
2008-03-03 -0.01323495 -0.01030203
2008-03-04 -0.01263646 -0.01031471
2008-03-05 -0.01222917 -0.01033507
2008-03-06 -0.01176701 -0.01033025
2008-03-07 -0.01360403 -0.01035688
2008-03-10 -0.01334929 -0.01039458
2008-03-11 -0.01339084 -0.01062285
2008-03-12 -0.01632837 -0.01094729
2008-03-13 -0.01600873 -0.01090959
2008-03-14 -0.01549607 -0.01082506
2008-03-17 -0.01574294 -0.01124373
2008-03-18 -0.01544405 -0.01122777
2008-03-19 -0.01875981 -0.01106906
2008-03-20 -0.01981496 -0.01167267
2008-03-24 -0.01981922 -0.01138780
2008-03-25 -0.01994828 -0.01138054
2008-03-26 -0.01916683 -0.01138651
2008-03-27 -0.01881581 -0.01171685
2008-03-28 -0.01816089 -0.01173378
2008-03-31 -0.01773119 -0.01171185
2008-04-01 -0.01712933 -0.01169614
2008-04-02 -0.01932527 -0.01172888
2008-04-03 -0.01862664 -0.01171184
2008-04-04 -0.01790164 -0.01169237
2008-04-07 -0.01728016 -0.01172288
2008-04-08 -0.01668403 -0.01141414
2008-04-09 -0.01565399 -0.01141968
2008-04-10 -0.01520254 -0.01143884
2008-04-11 -0.01408391 -0.01140905
2008-04-14 -0.01597748 -0.01177099
2008-04-15 -0.01522415 -0.01179067
2008-04-16 -0.01471571 -0.01174159
2008-04-17 -0.01619105 -0.01177454
2008-04-18 -0.01563512 -0.01175754
2008-04-21 -0.01538101 -0.01175619
2008-04-22 -0.01481623 -0.01174428
2008-04-23 -0.01439205 -0.01178524
2008-04-24 -0.01352539 -0.01159925
2008-04-25 -0.01245636 -0.01160130
2008-04-28 -0.01226322 -0.01161636
2008-04-29 -0.01179293 -0.01191309
2008-04-30 -0.01125705 -0.01189862
2008-05-01 -0.01088915 -0.01188514
2008-05-02 -0.01226603 -0.01192531
2008-05-05 -0.01179814 -0.01185793
2008-05-06 -0.01142907 -0.01188692
2008-05-07 -0.01130841 -0.01167423
2008-05-08 -0.01237490 -0.01225096
2008-05-09 -0.01192697 -0.01238535
2008-05-12 -0.01149399 -0.01205054
2008-05-13 -0.01157246 -0.01204441
2008-05-14 -0.01113051 -0.01203207
2008-05-15 -0.01069132 -0.01202071
2008-05-16 -0.01090922 -0.01205900
2008-05-19 -0.01049814 -0.01202546
2008-05-20 -0.01015312 -0.01205942
2008-05-21 -0.01011826 -0.01202825
2008-05-22 -0.01125025 -0.01244069
2008-05-23 -0.01082146 -0.01241750
2008-05-27 -0.01174083 -0.01259578
2008-05-28 -0.01157793 -0.01253764
2008-05-29 -0.01130220 -0.01252711
2008-05-30 -0.01105546 -0.01251679
2008-06-02 -0.01075565 -0.01250593
2008-06-03 -0.01058750 -0.01253083
2008-06-04 -0.01034156 -0.01255308
2008-06-05 -0.01001228 -0.01252008
2008-06-06 -0.01140092 -0.01248867
2008-06-09 -0.01466262 -0.01271641
2008-06-10 -0.01417605 -0.01281886
2008-06-11 -0.01372488 -0.01279919
2008-06-12 -0.01402494 -0.01308495
 [ reached getOption("max.print") -- omitted 139 rows ]

[[2]]
[[2]]$rect
[[2]]$rect$w
[1] 64.97259

[[2]]$rect$h
[1] 0.1684943

[[2]]$rect$left
[1] -14.44

[[2]]$rect$top
[1] 0.145146


[[2]]$text
[[2]]$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

[[2]]$text$y
[1]  0.128296536  0.111447107  0.094597678  0.077748248  0.060898819  0.044049390  0.027199961  0.010350532
[9] -0.006498897



[[3]]
[[3]][[1]]
[1] 1.622597 1.564253 1.737877 1.534359 1.076953 1.066265 1.068465 1.366382

[[3]][[2]]
[1] 0.328 0.312 0.348 0.332 0.144 0.156 0.140 0.224

[[3]][[3]]
               [,1]         [,2]         [,3]         [,4]         [,5]         [,6]         [,7]         [,8]
  [1,] 1.422256e-02 1.206721e-02 1.647452e-02 1.352405e-02 1.271299e-02 1.060869e-02 1.236957e-02 1.330517e-02
  [2,] 9.518986e-04 7.576688e-04 1.187111e-04 1.189437e-03 1.237923e-03 1.496282e-03 1.252545e-03 9.241308e-04
  [3,] 6.730127e-03 6.822888e-03 1.214203e-02 7.945456e-03 3.617051e-03 8.580334e-04 3.119558e-03 5.549885e-03
  [4,] 2.046272e-03 2.208453e-03 1.444431e-03 2.462081e-03 2.357996e-03 2.753045e-03 2.373986e-03 2.082752e-03
  [5,] 1.476969e-03 1.858636e-03 1.310999e-03 1.528950e-03 1.977556e-03 2.251939e-03 1.966580e-03 1.686889e-03
  [6,] 5.087287e-05 4.891482e-04 1.661058e-04 2.069752e-04 4.808271e-04 7.204112e-04 4.645743e-04 1.938510e-04
  [7,] 1.772462e-03 1.839120e-03 1.506726e-03 1.606977e-03 2.081847e-03 2.359741e-03 2.050995e-03 1.806072e-03
  [8,] 1.244503e-02 1.037497e-02 1.246388e-02 1.154933e-02 8.629034e-03 6.701202e-03 9.026306e-03 1.101216e-02
  [9,] 1.773487e-04 2.429385e-04 4.690570e-03 2.153515e-04 5.509269e-04 8.766257e-04 5.053526e-04 1.686337e-04
 [10,] 1.501829e-02 1.172525e-02 2.319447e-02 1.546022e-02 1.106533e-02 7.590182e-03 1.155631e-02 1.437101e-02
 [11,] 4.769366e-05 8.713103e-04 9.827556e-03 4.838972e-04 5.561735e-04 1.007863e-03 5.496024e-04 1.699515e-05
 [12,] 5.334513e-04 5.346834e-04 7.461246e-03 5.990296e-05 5.544141e-04 1.069272e-03 5.143210e-04 3.032722e-05
 [13,] 3.337668e-03 4.010541e-03 2.633353e-03 3.690583e-03 3.934066e-03 4.508318e-03 3.882560e-03 3.426014e-03
 [14,] 1.581529e-03 1.845352e-03 1.850973e-03 1.704424e-03 2.526820e-03 2.816158e-03 2.454859e-03 1.892946e-03
 [15,] 5.139423e-03 4.867112e-03 1.022214e-03 3.191825e-03 1.895646e-04 4.266148e-04 9.476237e-05 3.661952e-03
 [16,] 2.633942e-03 2.456689e-03 2.248309e-03 2.321823e-03 3.309010e-03 3.623215e-03 3.192037e-03 2.726414e-03
 [17,] 1.290984e-03 1.423103e-03 1.368035e-03 1.301196e-03 2.160134e-03 2.340794e-03 2.056843e-03 1.581664e-03
 [18,] 1.212028e-04 3.668425e-04 3.412246e-04 2.721922e-04 8.530044e-04 1.014674e-03 7.520482e-04 3.490528e-04
 [19,] 2.759441e-03 2.919333e-03 2.478207e-03 2.484258e-03 3.353754e-03 3.581003e-03 3.253211e-03 2.891322e-03
 [20,] 2.371647e-03 3.119267e-03 2.445867e-03 2.427942e-03 3.202108e-03 3.246656e-03 3.087162e-03 2.682233e-03
 [21,] 4.277098e-03 3.757298e-03 1.367883e-04 4.103903e-03 3.758480e-04 2.757963e-04 2.403114e-04 1.936590e-03
 [22,] 1.575096e-02 2.057014e-02 1.735344e-02 1.804923e-02 9.634481e-03 9.859076e-03 1.095182e-02 1.474121e-02
 [23,] 2.726578e-04 1.124605e-03 7.961653e-03 2.994381e-04 1.030236e-03 1.118305e-03 9.207310e-04 2.800873e-04
 [24,] 1.600271e-03 1.868765e-03 7.849322e-04 1.672201e-03 2.436900e-03 2.611305e-03 2.320753e-03 1.746116e-03
 [25,] 2.174116e-04 6.653480e-04 1.001021e-04 6.756631e-04 1.066610e-03 1.221913e-03 9.648253e-04 4.446588e-04
 [26,] 1.446513e-03 1.391361e-03 1.317601e-03 1.374832e-03 2.136809e-03 2.377552e-03 2.073749e-03 1.563588e-03
 [27,] 1.783893e-03 2.020417e-03 1.711647e-03 1.906633e-03 2.474976e-03 2.719297e-03 2.433577e-03 1.973663e-03
 [28,] 1.837789e-03 1.746096e-03 1.967048e-03 1.783836e-03 2.548050e-03 2.714715e-03 2.498349e-03 2.070090e-03
 [29,] 1.584954e-04 4.876930e-03 2.491388e-04 1.086598e-04 6.351213e-04 7.262813e-04 5.549073e-04 1.670533e-04
 [30,] 9.643281e-04 7.428917e-04 7.164551e-04 8.631318e-04 1.464143e-03 1.635924e-03 1.343029e-03 1.021068e-03
 [31,] 1.156015e-03 1.537269e-03 8.697136e-04 1.041476e-03 1.665868e-03 1.867841e-03 1.591526e-03 1.323272e-03
 [32,] 1.160440e-03 1.629811e-03 1.128855e-03 1.420654e-03 1.612134e-03 1.815916e-03 1.567584e-03 1.325353e-03
 [33,] 6.089642e-05 2.016204e-04 8.403974e-05 3.263664e-05 4.223635e-04 6.439469e-04 3.915925e-04 2.003058e-04
 [34,] 1.595185e-03 1.661150e-03 1.150407e-03 1.525774e-03 1.867194e-03 2.123121e-03 1.818414e-03 1.649183e-03
 [35,] 2.077884e-03 2.169136e-03 1.961718e-03 2.164978e-03 2.486874e-03 2.660305e-03 2.425073e-03 2.286159e-03
 [36,] 1.589979e-03 1.502680e-03 1.906688e-03 1.637104e-03 2.002657e-03 2.067878e-03 1.934742e-03 1.777043e-03
 [37,] 7.551639e-04 4.043703e-04 1.021279e-03 7.231706e-04 1.137492e-03 1.155723e-03 1.064776e-03 9.321627e-04
 [38,] 4.633974e-04 1.873944e-03 1.925033e-03 2.390379e-03 1.748141e-04 2.393813e-04 1.426638e-04 4.814934e-05
 [39,] 1.153843e-02 1.105351e-02 1.457967e-02 1.073614e-02 9.861329e-03 8.645986e-03 1.021692e-02 1.101442e-02
 [40,] 8.320935e-04 8.756828e-04 1.324111e-03 1.020791e-03 1.113843e-03 1.309314e-03 1.084062e-03 7.907699e-04
 [41,] 4.834434e-04 6.648504e-04 1.310281e-04 4.291356e-04 9.056175e-04 1.130760e-03 8.809033e-04 6.487280e-04
 [42,] 1.556501e-03 1.944698e-03 1.211106e-03 1.876527e-03 1.868983e-03 2.130623e-03 1.852542e-03 1.663132e-03
 [43,] 1.102826e-02 7.728745e-03 1.078274e-02 9.290332e-03 7.853539e-03 5.880061e-03 8.233318e-03 9.526407e-03
 [44,] 4.852639e-05 1.504094e-03 5.623249e-03 3.883874e-04 3.151365e-04 6.035755e-04 3.250321e-04 3.167414e-07
 [45,] 3.148716e-03 3.470799e-03 1.092400e-02 3.074223e-03 2.290415e-05 3.571973e-04 7.833460e-06 2.588737e-03
 [46,] 4.531244e-03 4.732795e-03 3.890362e-03 4.874669e-03 4.922167e-03 5.296930e-03 4.869774e-03 4.592975e-03
 [47,] 2.309362e-03 3.369047e-04 3.811024e-04 1.644380e-03 6.716572e-04 6.630716e-04 6.932716e-04 1.551633e-04
 [48,] 1.167506e-03 1.325056e-03 1.236407e-03 1.304600e-03 1.813116e-03 1.889810e-03 1.821408e-03 1.311494e-03
 [49,] 6.167140e-03 3.465173e-03 7.822954e-03 8.182336e-03 5.208378e-04 2.982802e-05 1.091257e-04 4.313033e-03
 [50,] 6.594226e-07 4.521256e-05 4.655205e-03 2.066937e-05 5.369167e-04 6.832459e-04 5.584464e-04 1.085251e-04
 [51,] 5.039351e-03 5.077091e-03 4.285982e-03 5.107582e-03 5.613965e-03 5.826946e-03 5.614771e-03 5.193143e-03
 [52,] 1.682357e-02 1.221703e-02 1.046992e-02 1.591885e-02 6.371614e-03 8.193487e-03 5.689839e-03 1.261151e-02
 [53,] 2.905697e-03 3.135788e-03 2.464161e-03 3.175080e-03 3.749377e-03 3.657786e-03 3.816825e-03 3.002597e-03
 [54,] 2.778134e-03 3.129300e-03 2.593748e-03 2.369466e-03 3.924589e-03 3.702881e-03 3.960995e-03 3.117853e-03
 [55,] 8.633409e-04 8.084845e-04 1.461355e-03 1.067301e-03 2.086231e-03 1.720989e-03 2.091296e-03 1.234522e-03
 [56,] 3.150634e-03 1.316287e-02 1.251237e-03 4.393391e-03 6.282266e-04 3.325262e-04 6.855545e-04 8.322982e-04
 [57,] 6.611470e-04 6.497018e-04 3.502790e-04 3.390635e-04 1.529374e-03 1.319679e-03 1.565725e-03 8.558286e-04
 [58,] 3.216570e-04 2.597006e-04 4.263595e-03 2.563388e-05 7.917149e-04 6.520515e-04 8.550372e-04 2.123262e-04
 [59,] 1.307686e-03 1.530169e-03 8.457070e-04 1.524488e-03 2.072607e-03 2.007598e-03 2.122298e-03 1.520364e-03
 [60,] 4.331158e-03 4.490269e-03 4.145624e-03 4.501758e-03 5.098801e-03 5.051403e-03 5.168480e-03 4.625162e-03
 [61,] 7.712633e-04 7.199099e-04 1.535005e-03 6.981465e-04 1.904670e-03 1.520907e-03 1.998383e-03 1.238744e-03
 [62,] 1.127384e-03 9.222669e-04 1.578637e-03 1.235671e-03 1.973516e-03 1.654568e-03 2.111097e-03 1.419616e-03
 [63,] 7.888482e-04 5.755992e-05 7.163140e-04 4.079448e-04 1.514764e-03 1.247620e-03 1.680625e-03 1.059698e-03
 [64,] 9.411571e-04 4.308954e-04 7.960734e-04 7.562893e-04 1.570127e-03 1.376457e-03 1.779140e-03 1.223411e-03
 [65,] 7.991684e-04 7.106337e-04 6.395542e-04 1.049110e-03 1.319442e-03 1.149919e-03 1.566137e-03 1.039147e-03
 [66,] 1.807387e-04 4.669710e-04 7.414160e-05 2.446457e-04 6.086129e-04 5.006954e-04 8.391861e-04 4.157548e-04
 [67,] 1.107732e-03 1.455100e-03 7.893906e-04 1.292019e-03 1.421366e-03 1.408527e-03 1.660051e-03 1.283681e-03
 [68,] 9.703159e-03 8.040053e-03 1.239952e-02 8.314782e-03 6.757447e-03 6.586022e-03 4.964217e-03 7.371590e-03
 [69,] 6.803168e-04 3.555100e-04 7.163797e-05 6.433130e-04 1.035690e-03 1.105300e-03 1.259811e-03 8.391615e-04
 [70,] 1.161532e-03 8.996768e-04 6.977342e-04 1.185406e-03 1.552368e-03 1.660807e-03 1.755332e-03 1.411984e-03
 [71,] 3.546907e-03 3.796225e-03 3.416112e-03 3.931982e-03 3.933705e-03 4.045930e-03 4.144918e-03 3.847506e-03
 [72,] 8.926201e-04 1.087236e-03 1.553232e-03 7.663050e-04 1.563585e-03 1.412210e-03 1.765113e-03 1.323462e-03
 [73,] 1.941324e-03 1.777327e-03 2.209356e-03 2.081389e-03 2.368601e-03 2.261934e-03 2.601555e-03 2.213797e-03
 [74,] 8.701633e-04 6.410133e-04 9.900378e-04 4.797338e-04 1.383191e-03 1.185547e-03 1.588617e-03 1.226135e-03
 [75,] 4.712767e-04 3.147377e-04 4.917443e-04 5.494048e-04 8.118663e-04 6.617690e-04 1.040400e-03 7.332054e-04
 [76,] 8.058479e-04 8.180085e-04 5.787697e-04 6.306096e-04 1.055494e-03 9.612055e-04 1.279566e-03 1.018884e-03
 [77,] 1.338150e-03 1.517604e-03 9.996183e-04 1.411174e-03 1.584053e-03 1.542998e-03 1.787273e-03 1.594659e-03
 [78,] 1.785677e-03 2.262262e-03 1.546458e-03 1.995635e-03 2.012945e-03 1.989052e-03 2.166770e-03 2.081264e-03
 [79,] 8.682167e-04 9.183201e-04 1.060784e-03 8.082765e-04 1.131867e-03 1.037279e-03 1.247832e-03 1.183146e-03
 [80,] 4.986281e-04 1.667480e-04 4.226360e-04 4.929626e-04 6.470694e-04 5.953116e-04 7.846151e-04 7.966314e-04
 [81,] 3.482426e-04 1.232186e-03 5.316952e-05 1.336440e-04 4.233723e-04 4.152275e-04 5.343421e-04 5.984987e-04
 [82,] 3.012232e-03 2.981329e-03 2.734367e-03 3.188765e-03 3.056240e-03 3.091931e-03 3.136349e-03 3.235948e-03
 [83,] 1.039582e-03 1.006650e-03 1.080144e-03 1.131723e-03 1.395198e-03 1.244002e-03 1.502607e-03 1.468535e-03
 [84,] 3.920786e-04 2.794524e-04 7.115911e-04 4.744233e-04 5.856022e-04 4.564710e-04 6.980973e-04 7.040763e-04
 [85,] 1.789949e-03 1.724859e-03 1.609481e-03 1.421334e-03 1.906046e-03 1.815754e-03 2.005514e-03 2.051299e-03
 [86,] 8.433091e-03 7.728571e-03 8.119382e-03 6.610798e-03 6.616391e-03 8.010351e-03 5.996621e-03 5.667387e-03
 [87,] 7.546223e-04 3.944766e-04 2.401882e-04 7.273618e-04 9.314586e-04 8.394747e-04 9.791197e-04 9.667250e-04
 [88,] 7.061457e-04 6.354020e-04 2.891949e-04 5.826340e-04 9.500976e-04 9.085429e-04 1.005707e-03 1.051545e-03
 [89,] 2.045315e-03 2.457020e-03 1.799316e-03 2.328724e-03 2.199406e-03 2.201908e-03 2.266259e-03 2.321915e-03
 [90,] 8.287071e-04 1.005147e-03 8.665350e-04 9.616452e-04 1.132817e-03 1.044194e-03 1.171488e-03 1.218683e-03
 [91,] 1.110580e-03 1.051062e-03 1.189749e-03 1.141709e-03 1.250806e-03 1.208524e-03 1.319233e-03 1.409389e-03
 [92,] 2.114029e-03 1.707043e-03 1.939483e-03 1.947975e-03 2.224847e-03 2.214221e-03 2.311683e-03 2.444621e-03
 [93,] 9.380412e-04 9.503139e-04 1.118352e-03 9.416130e-04 1.137559e-03 1.010890e-03 1.182100e-03 1.297078e-03
 [94,] 1.160694e-03 9.720948e-04 1.348367e-03 1.192279e-03 1.253774e-03 1.169044e-03 1.322822e-03 1.475554e-03
 [95,] 6.097247e-05 4.062549e-04 6.927650e-05 9.258728e-04 1.299551e-04 5.496359e-05 2.010871e-04 3.917178e-04
 [96,] 6.654999e-03 3.728655e-03 8.467196e-03 7.357490e-03 6.643356e-03 6.944330e-03 6.246971e-03 4.527985e-03
 [97,] 1.033456e-03 1.099405e-03 3.082842e-04 1.187400e-03 1.106094e-03 1.117035e-03 1.139373e-03 1.258416e-03
 [98,] 4.194594e-03 2.324573e-03 8.743345e-03 2.557061e-03 2.925288e-03 2.506631e-03 2.406115e-03 9.696801e-04
 [99,] 1.721253e-03 1.755477e-03 1.164547e-03 1.766559e-03 1.831326e-03 1.925941e-03 1.912406e-03 1.997900e-03
[100,] 1.326036e-03 1.654284e-03 1.088091e-03 1.516650e-03 1.555081e-03 1.595980e-03 1.618298e-03 1.714269e-03
[101,] 1.374216e-03 1.436610e-03 1.524218e-03 1.491780e-03 1.570957e-03 1.594004e-03 1.631484e-03 1.753975e-03
[102,] 1.096570e-03 7.535047e-04 9.765683e-04 9.691683e-04 1.297427e-03 1.300933e-03 1.355197e-03 1.501330e-03
[103,] 1.220849e-03 1.619946e-03 1.356255e-03 1.150922e-03 2.853203e-04 1.910636e-04 3.710527e-05 2.121330e-04
[104,] 3.825659e-04 3.162834e-04 4.543732e-05 2.389344e-04 4.687378e-04 5.227986e-04 4.738873e-04 6.682205e-04
[105,] 8.601592e-04 1.084452e-03 2.775477e-04 8.612880e-04 9.941236e-04 1.091146e-03 9.834365e-04 1.204588e-03
[106,] 2.883851e-03 3.387474e-03 2.588851e-03 3.018036e-03 2.966793e-03 3.095192e-03 2.981225e-03 3.232005e-03
[107,] 2.204322e-02 1.884495e-02 1.777354e-02 2.025630e-02 1.916129e-02 1.985005e-02 1.891135e-02 1.793237e-02
[108,] 1.367733e-03 1.382173e-03 7.078955e-04 1.475632e-03 1.580656e-03 1.603635e-03 1.708102e-03 1.513481e-03
[109,] 3.778680e-04 4.790626e-04 6.387656e-04 2.220020e-04 7.810400e-04 8.161772e-04 9.186252e-04 7.829057e-04
[110,] 4.981174e-03 4.290772e-03 8.059689e-03 3.268137e-03 2.109216e-03 1.378647e-03 9.871001e-04 1.820220e-03
[111,] 1.381766e-03 1.335878e-03 8.433389e-04 1.535966e-03 1.682271e-03 1.854753e-03 1.782556e-03 1.688558e-03
[112,] 2.129560e-03 2.626822e-03 1.740260e-03 2.292046e-03 2.514556e-03 2.660780e-03 2.611763e-03 2.569397e-03
[113,] 8.727046e-04 1.325271e-03 1.098960e-03 9.235203e-04 1.351117e-03 1.384450e-03 1.418297e-03 1.371423e-03
[114,] 4.232733e-04 3.271333e-04 4.847639e-04 4.777784e-04 7.359074e-04 7.940022e-04 8.313185e-04 8.240732e-04
[115,] 4.312778e-04 1.641003e-03 2.000022e-03 2.943925e-03 2.143142e-04 3.151443e-04 3.027506e-04 3.328124e-04
[116,] 1.108537e-03 1.106739e-03 6.952493e-04 1.282465e-03 1.332476e-03 1.490568e-03 1.387423e-03 1.434252e-03
[117,] 6.891622e-03 2.163036e-03 1.040966e-02 5.433185e-03 4.397124e-03 2.898848e-03 3.777014e-03 3.114976e-03
[118,] 9.169415e-04 1.085311e-03 3.790024e-04 9.293947e-04 1.126240e-03 1.386751e-03 1.191339e-03 1.218848e-03
[119,] 7.196621e-04 1.290030e-03 4.679479e-04 7.570790e-04 9.649833e-04 1.253055e-03 1.044694e-03 1.117001e-03
[120,] 1.390176e-03 1.851333e-03 1.033402e-03 1.640902e-03 1.585653e-03 1.900566e-03 1.675937e-03 1.788361e-03
[121,] 1.708709e-02 1.799876e-02 1.830646e-02 1.573981e-02 1.494943e-02 1.249194e-02 1.421015e-02 1.295306e-02
[122,] 5.201258e-04 2.740029e-04 2.252491e-03 4.807410e-04 7.206142e-04 1.114478e-03 8.434098e-04 7.756687e-04
[123,] 1.325117e-03 1.827109e-03 6.577993e-04 1.346900e-03 1.593163e-03 2.020407e-03 1.709736e-03 1.678176e-03
[124,] 1.185726e-03 1.649975e-03 1.097513e-03 1.664032e-03 1.511388e-03 1.923180e-03 1.632721e-03 1.638802e-03
[125,] 7.239923e-03 3.309565e-03 7.340965e-03 6.340025e-03 5.139029e-03 1.606886e-03 3.995103e-03 3.622468e-03
 [ reached getOption("max.print") -- omitted 125 rows ]

[[3]][[4]]
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
  [1,]    1    1    1    1    1    1    1    1
  [2,]    0    0    0    0    0    0    0    0
  [3,]    1    1    1    1    1    1    1    1
  [4,]    0    0    0    0    0    0    0    0
  [5,]    0    0    0    0    0    0    0    0
  [6,]    0    0    0    0    0    0    0    0
  [7,]    0    0    0    0    0    0    0    0
  [8,]    1    1    1    1    1    1    1    1
  [9,]    0    0    1    0    0    0    0    0
 [10,]    1    1    1    1    1    1    1    1
 [11,]    0    0    1    0    0    0    0    0
 [12,]    1    0    1    1    0    0    0    0
 [13,]    0    0    0    0    0    0    0    0
 [14,]    0    0    0    0    0    0    0    0
 [15,]    1    1    1    1    0    0    0    1
 [16,]    0    0    0    0    0    0    0    0
 [17,]    0    0    0    0    0    0    0    0
 [18,]    0    0    0    0    0    0    0    0
 [19,]    0    0    0    0    0    0    0    0
 [20,]    0    0    0    0    0    0    0    0
 [21,]    1    1    0    1    0    0    0    1
 [22,]    1    1    1    1    1    1    1    1
 [23,]    0    1    1    0    0    0    0    0
 [24,]    0    0    0    0    0    0    0    0
 [25,]    0    0    0    0    0    0    0    0
 [26,]    0    0    0    0    0    0    0    0
 [27,]    0    0    0    0    0    0    0    0
 [28,]    0    0    0    0    0    0    0    0
 [29,]    1    1    0    1    0    0    0    0
 [30,]    0    0    0    0    0    0    0    0
 [31,]    0    0    0    0    0    0    0    0
 [32,]    0    0    0    0    0    0    0    0
 [33,]    0    0    0    0    0    0    0    0
 [34,]    0    0    0    0    0    0    0    0
 [35,]    0    0    0    0    0    0    0    0
 [36,]    0    0    0    0    0    0    0    0
 [37,]    0    0    0    0    0    0    0    0
 [38,]    1    1    1    1    0    0    0    0
 [39,]    1    1    1    1    1    1    1    1
 [40,]    0    0    1    0    0    0    0    0
 [41,]    0    0    1    0    0    0    0    0
 [42,]    0    0    0    0    0    0    0    0
 [43,]    1    1    1    1    1    1    1    1
 [44,]    1    1    1    1    0    0    0    0
 [45,]    1    1    1    1    0    0    0    1
 [46,]    0    0    0    0    0    0    0    0
 [47,]    1    0    0    1    0    0    0    0
 [48,]    0    0    0    0    0    0    0    0
 [49,]    1    1    1    1    1    0    1    1
 [50,]    0    0    1    0    0    0    0    0
 [51,]    0    0    0    0    0    0    0    0
 [52,]    1    1    1    1    1    1    1    1
 [53,]    0    0    0    0    0    0    0    0
 [54,]    0    0    0    0    0    0    0    0
 [55,]    0    0    0    0    0    0    0    0
 [56,]    1    1    1    1    0    0    0    1
 [57,]    0    0    0    0    0    0    0    0
 [58,]    1    0    1    0    0    0    0    0
 [59,]    0    0    0    0    0    0    0    0
 [60,]    0    0    0    0    0    0    0    0
 [61,]    0    0    0    0    0    0    0    0
 [62,]    0    0    0    0    0    0    0    0
 [63,]    0    0    0    0    0    0    0    0
 [64,]    0    0    0    0    0    0    0    0
 [65,]    0    0    0    0    0    0    0    0
 [66,]    0    0    0    1    0    0    0    0
 [67,]    0    0    0    0    0    0    0    0
 [68,]    1    1    1    1    1    1    1    1
 [69,]    0    0    0    0    0    0    0    0
 [70,]    0    0    0    0    0    0    0    0
 [71,]    0    0    0    0    0    0    0    0
 [72,]    0    0    0    0    0    0    0    0
 [73,]    0    0    0    0    0    0    0    0
 [74,]    0    0    0    0    0    0    0    0
 [75,]    0    0    0    0    0    0    0    0
 [76,]    0    0    0    0    0    0    0    0
 [77,]    0    0    0    0    0    0    0    0
 [78,]    0    0    0    0    0    0    0    0
 [79,]    0    0    0    0    0    0    0    0
 [80,]    0    0    0    0    0    0    0    0
 [81,]    0    1    1    0    0    0    0    0
 [82,]    0    0    0    0    0    0    0    0
 [83,]    0    0    0    0    0    0    0    0
 [84,]    0    0    0    0    0    0    0    0
 [85,]    0    0    0    0    0    0    0    0
 [86,]    1    1    1    1    1    1    1    1
 [87,]    0    0    0    0    0    0    0    0
 [88,]    0    0    0    0    0    0    0    0
 [89,]    0    0    0    0    0    0    0    0
 [90,]    0    0    0    0    0    0    0    0
 [91,]    0    0    0    0    0    0    0    0
 [92,]    0    0    0    0    0    0    0    0
 [93,]    0    0    0    0    0    0    0    0
 [94,]    0    0    0    0    0    0    0    0
 [95,]    0    1    1    1    0    0    0    0
 [96,]    1    1    1    1    1    1    1    1
 [97,]    0    0    0    0    0    0    0    0
 [98,]    1    1    1    1    1    1    1    1
 [99,]    0    0    0    0    0    0    0    0
[100,]    0    0    0    0    0    0    0    0
[101,]    0    0    0    0    0    0    0    0
[102,]    0    0    0    0    0    0    0    0
[103,]    1    1    1    1    1    1    0    0
[104,]    0    0    0    0    0    0    0    0
[105,]    0    0    0    0    0    0    0    0
[106,]    0    0    0    0    0    0    0    0
[107,]    1    1    1    1    1    1    1    1
[108,]    0    0    0    0    0    0    0    0
[109,]    0    0    1    0    0    0    0    0
[110,]    1    1    1    1    1    1    1    1
[111,]    0    0    0    0    0    0    0    0
[112,]    0    0    0    0    0    0    0    0
[113,]    0    0    0    0    0    0    0    0
[114,]    0    0    0    0    0    0    0    0
[115,]    1    1    1    1    0    0    0    0
[116,]    0    0    0    0    0    0    0    0
[117,]    1    1    1    1    1    1    1    1
[118,]    0    0    0    0    0    0    0    0
[119,]    0    0    0    0    0    0    0    0
[120,]    0    0    0    0    0    0    0    0
[121,]    1    1    1    1    1    1    1    1
[122,]    0    0    1    0    0    0    0    0
[123,]    0    0    0    0    0    0    0    0
[124,]    0    0    0    0    0    0    0    0
[125,]    1    1    1    1    1    1    1    1
 [ reached getOption("max.print") -- omitted 125 rows ]


[[4]]

preserveb2752021d4049cb3

NA

Global ETFs

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.2055217

$rect$left
[1] -14.44

$rect$top
[1] 0.1472487


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.126696536  0.106144369  0.085592201  0.065040034  0.044487866  0.023935699  0.003383532 -0.017168636
[9] -0.037720803

preserveb11d97481b3bd173

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.1919429

$rect$left
[1] -14.44

$rect$top
[1] 0.1464776


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.127283291  0.108088998  0.088894706  0.069700413  0.050506120  0.031311828  0.012117535 -0.007076758
[9] -0.026271050

preserve2103219fcada70dc

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.1684943

$rect$left
[1] -14.44

$rect$top
[1] 0.145146


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.128296536  0.111447107  0.094597678  0.077748248  0.060898819  0.044049390  0.027199961  0.010350532
[9] -0.006498897

preservea6f6e5bd9160eb3d

Commodity ETFs

Bond ETFs

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.2055217

$rect$left
[1] -14.44

$rect$top
[1] 0.1472487


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.126696536  0.106144369  0.085592201  0.065040034  0.044487866  0.023935699  0.003383532 -0.017168636
[9] -0.037720803

preservec06a27d6bfcb69d1

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.1827557

$rect$left
[1] -14.44

$rect$top
[1] 0.1459559


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.1276802810  0.1094047076  0.0911291341  0.0728535607  0.0545779872  0.0363024138  0.0180268404
[8] -0.0002487331 -0.0185243065

preservef74a8023e4a69f55

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.1684943

$rect$left
[1] -14.44

$rect$top
[1] 0.145146


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.128296536  0.111447107  0.094597678  0.077748248  0.060898819  0.044049390  0.027199961  0.010350532
[9] -0.006498897

preserve9fa9363bc5695f1f

All ETFs

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.2292304

$rect$left
[1] -14.44

$rect$top
[1] 0.1485951


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.12567205  0.10274901  0.07982597  0.05690294  0.03397990  0.01105686 -0.01186618 -0.03478922 -0.05771226

preservec6b660fff771da4b

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.1957809

$rect$left
[1] -14.44

$rect$top
[1] 0.1466955


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.127117447  0.107539357  0.087961268  0.068383178  0.048805088  0.029226998  0.009648908 -0.009929182
[9] -0.029507272

preserve039b7eb053b46f36

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.1684943

$rect$left
[1] -14.44

$rect$top
[1] 0.145146


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.128296536  0.111447107  0.094597678  0.077748248  0.060898819  0.044049390  0.027199961  0.010350532
[9] -0.006498897

preserve065148f76b350c78

2010 Ending

U.S. ETFs

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.08678328

$rect$left
[1] -14.36

$rect$top
[1] 0.04802718


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.039348853  0.030670525  0.021992198  0.013313870  0.004635542 -0.004042786 -0.012721113 -0.021399441
[9] -0.030077769

preserve66eeefde999d409a

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.06319868

$rect$left
[1] -14.36

$rect$top
[1] 0.04668784


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.040367973  0.034048105  0.027728237  0.021408369  0.015088501  0.008768632  0.002448764 -0.003871104
[9] -0.010190972

preservedaa7a6825337e142

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.05746902

$rect$left
[1] -14.36

$rect$top
[1] 0.04636246


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.0406155591  0.0348686575  0.0291217558  0.0233748541  0.0176279525  0.0118810508  0.0061341492
[8]  0.0003872475 -0.0053596542

preserveb77dcea31e23e69a

Global ETFs

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.09518427

$rect$left
[1] -14.36

$rect$top
[1] 0.04850426


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.0389858360  0.0294674094  0.0199489827  0.0104305560  0.0009121293 -0.0086062973 -0.0181247240
[8] -0.0276431507 -0.0371615774

preservede78aadbd3992b7f

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.06289976

$rect$left
[1] -14.36

$rect$top
[1] 0.04667087


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.040380890  0.034090914  0.027800939  0.021510963  0.015220987  0.008931011  0.002641035 -0.003648940
[9] -0.009938916

preserve20d468cf1baadd81

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.05746902

$rect$left
[1] -14.36

$rect$top
[1] 0.04636246


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.0406155591  0.0348686575  0.0291217558  0.0233748541  0.0176279525  0.0118810508  0.0061341492
[8]  0.0003872475 -0.0053596542

preserve691646a3fc52a2a0

Commodity ETFs

Bond ETFs

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.09032912

$rect$left
[1] -14.36

$rect$top
[1] 0.04822855


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.039195633  0.030162721  0.021129809  0.012096896  0.003063984 -0.005968928 -0.015001840 -0.024034752
[9] -0.033067665

preserve5895982b33945237

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.06066502

$rect$left
[1] -14.36

$rect$top
[1] 0.04654396


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.040477456  0.034410954  0.028344453  0.022277951  0.016211450  0.010144948  0.004078446 -0.001988055
[9] -0.008054557

preserveef7b108da00de417

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.05746902

$rect$left
[1] -14.36

$rect$top
[1] 0.04636246


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.0406155591  0.0348686575  0.0291217558  0.0233748541  0.0176279525  0.0118810508  0.0061341492
[8]  0.0003872475 -0.0053596542

preserve9259fc7bae7d771f

All ETFs

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.09469975

$rect$left
[1] -14.36

$rect$top
[1] 0.04847675


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.039006773  0.029536798  0.020066824  0.010596849  0.001126875 -0.008343100 -0.017813074 -0.027283049
[9] -0.036753023

preserve762ad2a03f3b41fb

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.06122859

$rect$left
[1] -14.36

$rect$top
[1] 0.04657596


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.040453103  0.034330245  0.028207386  0.022084527  0.015961668  0.009838810  0.003715951 -0.002406908
[9] -0.008529767

preservef1c4f727fb1776f3

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.05746902

$rect$left
[1] -14.36

$rect$top
[1] 0.04636246


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.0406155591  0.0348686575  0.0291217558  0.0233748541  0.0176279525  0.0118810508  0.0061341492
[8]  0.0003872475 -0.0053596542

preserve14e9aef632f086a8

2014 Ending

U.S. ETFs

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.06318821

$rect$left
[1] -14.44

$rect$top
[1] 0.02801616


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.021697343  0.015378522  0.009059702  0.002740881 -0.003577940 -0.009896761 -0.016215582 -0.022534403
[9] -0.028853223

preserve0392f5189594f944

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.0391762

$rect$left
[1] -14.44

$rect$top
[1] 0.02665255


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.0227349323  0.0188173126  0.0148996929  0.0109820733  0.0070644536  0.0031468339 -0.0007707857
[8] -0.0046884054 -0.0086060251

preserveb92f1954a7914da4

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.03920233

$rect$left
[1] -14.44

$rect$top
[1] 0.02665404


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.0227338031  0.0188135703  0.0148933375  0.0109731047  0.0070528719  0.0031326391 -0.0007875937
[8] -0.0047078265 -0.0086280593

preservea08943135e7e335a

Global ETFs

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.06007008

$rect$left
[1] -14.44

$rect$top
[1] 0.02783909


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.021832082  0.015825074  0.009818066  0.003811058 -0.002195950 -0.008202958 -0.014209965 -0.020216973
[9] -0.026223981

preservee9458bd14a7f5d28

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.0391762

$rect$left
[1] -14.44

$rect$top
[1] 0.02665255


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.0227349323  0.0188173126  0.0148996929  0.0109820733  0.0070644536  0.0031468339 -0.0007707857
[8] -0.0046884054 -0.0086060251

preserveb74176de51fd96af

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.03323897

$rect$left
[1] -14.44

$rect$top
[1] 0.02631538


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.022991487  0.019667590  0.016343693  0.013019795  0.009695898  0.006372001  0.003048103 -0.000275794
[9] -0.003599691

preservec0a04b2883398714

Commodity ETFs

Bond ETFs

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.05387232

$rect$left
[1] -14.44

$rect$top
[1] 0.02748713


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.0220998945  0.0167126626  0.0113254307  0.0059381988  0.0005509669 -0.0048362650 -0.0102234969
[8] -0.0156107288 -0.0209979607

preserve8288f932ee78ff49

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.04065019

$rect$left
[1] -14.44

$rect$top
[1] 0.02673626


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.022671239  0.018606220  0.014541201  0.010476182  0.006411163  0.002346144 -0.001718875 -0.005783894
[9] -0.009848913

preserve25ec970401fa32b5

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.03323897

$rect$left
[1] -14.44

$rect$top
[1] 0.02631538


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.022991487  0.019667590  0.016343693  0.013019795  0.009695898  0.006372001  0.003048103 -0.000275794
[9] -0.003599691

preserve0b3f551026613249

All ETFs

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.07726224

$rect$left
[1] -14.44

$rect$top
[1] 0.02881541


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.021089187  0.013362963  0.005636739 -0.002089484 -0.009815708 -0.017541932 -0.025268156 -0.032994380
[9] -0.040720603

preserve2d87bed189b20def

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.04281603

$rect$left
[1] -14.44

$rect$top
[1] 0.02685925


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.022577650  0.018296047  0.014014444  0.009732841  0.005451238  0.001169635 -0.003111968 -0.007393571
[9] -0.011675174

preserve5c1a5d8d6208f21f

$rect
$rect$w
[1] 64.97259

$rect$h
[1] 0.03368237

$rect$left
[1] -14.44

$rect$top
[1] 0.02634056


$text
$text$x
[1] 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514 24.21514

$text$y
[1]  0.0229723274  0.0196040905  0.0162358535  0.0128676165  0.0094993796  0.0061311426  0.0027629057
[8] -0.0006053313 -0.0039735682

preserved46f4a384278aaca

2016 Ending

U.S. ETFs

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.04983222

$rect$left
[1] -14.36

$rect$top
[1] 0.02691495


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.021931725  0.016948503  0.011965282  0.006982060  0.001998838 -0.002984383 -0.007967605 -0.012950826
[9] -0.017934048

preserve84d1c76b72b666a2

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.04546367

$rect$left
[1] -14.36

$rect$top
[1] 0.02991372


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.025367350  0.020820983  0.016274617  0.011728250  0.007181883  0.002635516 -0.001910850 -0.006457217
[9] -0.011003584

preserve8c42a4441a01afed

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.04272322

$rect$left
[1] -14.36

$rect$top
[1] 0.02651124


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.022238914  0.017966592  0.013694270  0.009421948  0.005149626  0.000877304 -0.003395018 -0.007667340
[9] -0.011939662

preserve747be26643295903

Global ETFs

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.04983222

$rect$left
[1] -14.36

$rect$top
[1] 0.02691495


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.021931725  0.016948503  0.011965282  0.006982060  0.001998838 -0.002984383 -0.007967605 -0.012950826
[9] -0.017934048

preserve88e132c12b273aa2

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.0431767

$rect$left
[1] -14.36

$rect$top
[1] 0.02653699


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.0222193182  0.0179016485  0.0135839788  0.0092663092  0.0049486395  0.0006309698 -0.0036866999
[8] -0.0080043696 -0.0123220393

preserve08324b45a8a4e906

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.04272322

$rect$left
[1] -14.36

$rect$top
[1] 0.02651124


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.022238914  0.017966592  0.013694270  0.009421948  0.005149626  0.000877304 -0.003395018 -0.007667340
[9] -0.011939662

preserveba0ef8dc545eebd5

Commodity ETFs

Bond ETFs

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.04983222

$rect$left
[1] -14.36

$rect$top
[1] 0.02691495


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.021931725  0.016948503  0.011965282  0.006982060  0.001998838 -0.002984383 -0.007967605 -0.012950826
[9] -0.017934048

preserve1f7ad4990bc92f18

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.0431767

$rect$left
[1] -14.36

$rect$top
[1] 0.02653699


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.0222193182  0.0179016485  0.0135839788  0.0092663092  0.0049486395  0.0006309698 -0.0036866999
[8] -0.0080043696 -0.0123220393

preserveadc8dde2a60a8e2a

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.04272322

$rect$left
[1] -14.36

$rect$top
[1] 0.02651124


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.022238914  0.017966592  0.013694270  0.009421948  0.005149626  0.000877304 -0.003395018 -0.007667340
[9] -0.011939662

preserve99e5758aaa214d09

All ETFs

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.04983222

$rect$left
[1] -14.36

$rect$top
[1] 0.02691495


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.021931725  0.016948503  0.011965282  0.006982060  0.001998838 -0.002984383 -0.007967605 -0.012950826
[9] -0.017934048

preserve5585e6a803b2da56

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.0431767

$rect$left
[1] -14.36

$rect$top
[1] 0.02653699


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.0222193182  0.0179016485  0.0135839788  0.0092663092  0.0049486395  0.0006309698 -0.0036866999
[8] -0.0080043696 -0.0123220393

preserve8c89dfcd2f37c0d3

$rect
$rect$w
[1] 64.61263

$rect$h
[1] 0.04272322

$rect$left
[1] -14.36

$rect$top
[1] 0.02651124


$text
$text$x
[1] 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098 24.08098

$text$y
[1]  0.022238914  0.017966592  0.013694270  0.009421948  0.005149626  0.000877304 -0.003395018 -0.007667340
[9] -0.011939662

preserveca2d0fd6cc59860d

JUNK CODE

Problem solving on 4.25.2020 to see why commodities ETFs code had a problem.

LS0tCnRpdGxlOiAiTS5TLiBUaGVzaXMgLSBGaXJzdCBEcmFmdCIKYXV0aG9yOiAiU3RldmVuIE1vZW4iCmRhdGU6ICJGcmlkYXksIEphbnVhcnkgMjR0aCwgMjAyMCIKb3V0cHV0OgogIHBkZl9kb2N1bWVudDogZGVmYXVsdAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKLS0tCgpgYGB7ciBnbG9iYWxfb3B0aW9ucywgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD04LCBmaWcucGF0aD0nRmlncy8nLAogICAgICAgICAgICAgICAgICAgICAgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgY2FjaGUgPSBUUlVFKQpgYGAKCiMgQmFja2dyb3VuZCBhbmQgSW50cm9kdWN0aW9uCgpWYWx1ZS1hdC1yaXNrIG1vZGVsaW5nLCBvciBWYVIsIGlzIGEgY29tbW9ubHkgdXNlZCB0b29sIHRvIG1lYXN1cmUgcmlza2luZXNzIGluIGEgZmluYW5jaWFsIGluc3RpdHV0aW9uLiBDQVZpYVIgd2FzIGEgbmV3IHRha2Ugb24gcmlzayBtb2RlbGluZyBvcmlnaW5hbGx5IHByb3Bvc2VkIGJ5IFJvYmVydCBFbmdsZSBhbmQgU2ltb25lIE1hbmdhbmVsbGkgaW4gMjAwNCB3aGljaCBidWlsZHMgdXBvbiB0aGUgbGl0ZXJhdHVyZSBvZiBtb2RlbGluZyByZWdyZXNzaW9uIHF1YW50aWxlcyBpbiBzZXR0aW5ncyB3aGljaCBhcmUgZXNzZW50aWFsLiAKCmFuZCBhZ3JlZSB3aXRoIHRoZSBiYXNpYyBwcmVtaXNlIG9mIHRoZSBDQVZpYVIgcGFwZXIgdGhhdCBtYW55IG9mIHRoZSBub25wYXJhbWV0cmljIGhpc3RvcmljYWwgc2ltdWxhdGlvbiBtZXRob2RzIGRvbuKAmXQgaGF2ZSBhdHRyYWN0aXZlIHN0YXRpc3RpY2FsIHByb3BlcnRpZXMgYW5kIGFyZSBjaG9zZW4gbW9yZSBmb3IgZXhwZXJpbWVudGFsIHF1YWxpdGllcyAoYW4gZXhhbXBsZSBvZiB0aGlzIGluIHRoZSAxOTk4IHBhcGVyIGJ5IEJvdWRvdWtoLCBSaWNoYXJkc29uLCBhbmQgV2hpdGVsYXcgY2l0ZWQgYnkgRW5nbGUgd2hpY2ggdXNlcyBhIHNlbWlwYXJhbWV0cmljICJoeWJyaWQiIGFwcHJvYWNoKQpJIHRoaW5rIHRyeWluZyB0byB0aGluayB0b28gbmFycm93bHkgYWJvdXQgVmFSIGlzbid0IGEgdmVyeSBpbnRlcmVzdGluZyBzdGF0aXN0aWNhbCBwcm9ibGVtIC0gaW4gYSBzZW5zZSwgVmFSIGlzIGp1c3QgYSB1c2VmdWwgc3VtbWFyaXphdGlvbiBvZiBxdWFudGlsZSByaXNrIHB1dCBpbnRvIGRvbGxhciBmaWd1cmVzIGZvciBlYXN5IGNvbnN1bXB0aW9uCkluIG15IG9waW5pb24sIHRoZSBtb3N0IGludGVyZXN0aW5nIHF1ZXN0aW9uIGluIHRoZSBDQVZpYVIgcGFwZXIgaXNu4oCZdCBWYVIgcGVyIHNlLCBpdOKAmXMgdGVzdGluZyB0aGVpciB0aGVvcmVtcyB1bmRlciByZWxheGF0aW9ucyBvZiB0aGVpciBhc3N1bXB0aW9ucyB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGVpciBhcHByb2FjaCB0byBleHRyZW1lIHZhbHVlIHRoZW9yeS4gSW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyBhbmFseXNlcyBjYXRjaCBteSBleWU6CkhvdyBpbXBvcnRhbnQgaXMgdGhlIGFzc3VtcHRpb24gQzIgb24gcGFnZSAzNzQgb2YgdGhlIENBVklBUiBwYXBlciAod2hpY2ggdW5kZXJsaWVzIFRoZW9yZW0gMSBhYm91dCB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIGVzdGltYXRvciBiZXRhIGhhdCk/IEl0IHN0YXRlcyB0aGF0ICJjb25kaXRpb25hbCBvbiBhbGwgb2YgdGhlIHBhc3QgaW5mb3JtYXRpb24uLi50aGUgZXJyb3IgdGVybXMgZm9ybSBhIHN0YXRpb25hcnkgcHJvY2VzcyIuIEl0IG1heSBiZSBhbiBpbnRlcmVzdGluZyB0ZXN0IHRvIHNlZSBob3cgbXVjaCBub25zdGF0aW9uYXJpdHkgYWZmZWN0cyB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIGVzdGltYXRvciBiZXRhIGhhdC4gSSBjb3VsZCBkbyB0aGlzIHZpYSBzaW11bGF0aW9uIGFuZCBzZWUgaWYgdGhlcmUncyBhIGxvdCBvZiB2YWx1ZSBoZXJlLCB3aGljaCBtYXkgbGVhZCB1cyB0byBhIG1vcmUgZnVuZGFtZW50YWwgcmVzdWx0LgpJbiBteSBvcGluaW9uLCB0aGVvcmVtcyA0IGFuZCA1IChwLiAzNzEpIGFyZSB0aGUgbW9zdCBpbXBvcnRhbnQgaW4gdGhlIHBhcGVyIGJlY2F1c2UgdGhleSBzdGF0ZSB0aGF0IHRoZSBEUV9JUyBhbmQgRFFfT09TIHF1YW50aXRpZXMgYXJlIHBpdm90YWxzIGFzeW1wdG90aWNhbGx5LiBCdXQgaXQgYmVncyB0aGUgcXVlc3Rpb24gb2YgaG93IG11Y2ggZG9lcyB0aGF0IG1hdHRlciwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBWYVIsIHdoaWNoIGluIGFsbCBsaWtlbGlob29kIGlzIHdvcmtpbmcgd2l0aCBsaW1pdGVkIGRhdGE/IFRoZXJlZm9yZSwgaXQgc2VlbXMgdG8gbWUgdGhhdCB0aGUgRFE4IGFuZCBEUTkgYXNzdW1wdGlvbnMgYXJlIHRoZSBzaGFraWVzdCBhc3N1bXB0aW9ucyByZXF1aXJlZCBmb3IgdGhlb3JlbSA1LiBJdCBtaWdodCBiZSBpbnRlcmVzdGluZyB0byBzZWUgaG93IGZhciBvZmYgZnJvbSBhIGNoaS1zcXVhcmVkIGRpc3RyaWJ1dGlvbiByZWFsLXdvcmxkIGRhdGEgYWN0dWFsbHkgaXMuIFRoaXMgbWF5IGFsbG93IHVzIHRvIGRldmVsb3AgInJ1bGVzIG9mIHRodW1iIiBhYm91dCB0aGUgYWNjdXJhY3kgb2YgdGhlc2UgYXN5bXB0b3RpYyBkaXN0cmlidXRpb25zLgoKIyBNZXRob2RzIFVzZWQKCkZpbGwgaW4uCgojIERhdGEgVXNlZAoKIyBSZXN1bHRzCgojIENPREUKCiMjIExpYnJhcmllcwoKYGBge3J9CiMgUmVhZCBpbiByZWxldmFudCBsaWJyYXJpZXMKbGlicmFyeShtaWNyb2JlbmNobWFyaykKbGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KHF1YW50bW9kKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkodHNlcmllcykKbGlicmFyeSh6b28pCmxpYnJhcnkobWFncml0dHIpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShmb3JtYXR0YWJsZSkKbGlicmFyeShxdWFudHJlZykKbGlicmFyeShNVFMpCmxpYnJhcnkocGxvdDNEKQoKIyBTZXQgdXAgd29ya2luZyBkaXJlY3RvcnkKIyBzZXR3ZCgifi9Eb2N1bWVudHMvR2l0SHViL0NhdmlhUiIpCgojIHNvdXJjZSgnY2F2aWFyX1NNLlInKQpzb3VyY2UoJ34vRG9jdW1lbnRzL0dpdEh1Yi9DYXZpYVIvY2F2aWFyX1NNLlInKQpgYGAKCmBgYHtyfQojIFRoaXMgY29kZSBiZWxvdyBpcyBmb3IgdXNlIGluIHRoZSBDQVZpYVIgc2VjdGlvbnMuCmBgYAoKYGBge3J9CiMgSGVyZSBpcyBjb2RlIHRoYXQgSSdsbCB3cmFwIHNvbWUgcGFydHMgaW4gdG8gYXZvaWQgc3VwZXJmbHVvdXMgb3V0cHV0CnF1aWV0IDwtIGZ1bmN0aW9uKHgpIHsgCiAgc2luayh0ZW1wZmlsZSgpKSAKICBvbi5leGl0KHNpbmsoKSkgCiAgaW52aXNpYmxlKGZvcmNlKHgpKSAKfSAKYGBgCgojIyBVbml2YXJpYXRlIENBVmlhUiBTZWN0aW9uCgpgYGB7cn0KIycgVGhpcyBpcyBhIGZ1bmN0aW9uIHdoaWNoIHB1bGxzIGRhdGEgZm9yIHVzZSBpbiB0aGUgQ0FWaWFSIG1vZGVsCiMnCiMnIEBwYXJhbSBzeW1ib2wgLSBzeW1ib2wgdG8gcHVsbAojJyBAcGFyYW0gY29tcGxfY2FzZSAtIGRlZmF1bHRzIHRvIHRydWUuLi5vbmx5IGluY2x1ZGVzIGNvbXBsZXRlIGNhc2VzIGluIHRoZSBkYXRhCiMnIEBwYXJhbSBhZGpfY2xvc2UgLSB1c2UgYWRqdXN0ZWQgY2xvc2luZyBwcmljZXMuIERlZmF1bHQgaXMgeWVzLgojJyBAcGFyYW0gbG9nX3JldHVybiAtIHVzZSBsb2cgcmV0dXJuPyBEZWZhdWx0IGlzIHllcy4KIycKIycgQHJldHVybiAtIGEgZGF0YSBmcmFtZSB3aGljaCBjYW4gYmUgZmVkIGludG8gbGF0ZXIgZnVuY3Rpb25zCiMnIEBleHBvcnQKIycKIycgQGV4YW1wbGVzIC0gZGF0YV9wdWxsKCJTUFkiKQpkYXRhX3B1bGwgPSBmdW5jdGlvbihzeW1ib2wsIGNvbXBsX2Nhc2UgPSAxLCBhZGpfY2xvc2UgPSAxLCBsb2dfcmV0dXJuID0gMSwgc3RhcnRfZGF0ZSA9ICIxOTAwLTAxLTAxIiwgZW5kX2RhdGUgPSBTeXMuRGF0ZSgpKXsKICAjIFB1bGwgaW4gZGF0YSBmcm9tIHF1YW50bW9kCiAgcmVzcG9uc2VfcHVsbCA9IGdldFN5bWJvbHMoc3ltYm9sLCBhdXRvLmFzc2lnbiA9IEZBTFNFLCBmcm9tID0gc3RhcnRfZGF0ZSwgdG8gPSBlbmRfZGF0ZSkKICAjIEdldCBhZGp1c3RlZCBjbG9zaW5nIHByaWNlCiAgaWYgKGFkal9jbG9zZSA9PSBUUlVFKXsKICAgIGRmID0gQWQocmVzcG9uc2VfcHVsbCkKICB9IGVsc2UgewogICAgZGYgPSBDbChyZXNwb25zZV9wdWxsKQogIH0KICAjIFJldHVybiBjb21wbGV0ZSBjYXNlcyBvbmx5IAogIGlmIChjb21wbF9jYXNlID09IFRSVUUpewogICAgZGYgPSBkZltjb21wbGV0ZS5jYXNlcyhkZiksIF0KICB9IGVsc2V7CiAgICBkZiA9IGRmCiAgfQogICMgQ2FsY3VsYXRlIGxvZyByZXR1cm4gb2YgZGF0YQogIGlmIChsb2dfcmV0dXJuID09IFRSVUUpewogICAgbHIgPSBsb2coZGZbLDFdL3NoaWZ0KGRmWywxXSwgMSwgdHlwZSA9ICJsYWciKSkKICAgICMgQ29tYmluZSBkYXRhCiAgICBkZl9vdXQgPSBjYmluZChkZiwgbHIpCiAgICAjIFJlbmFtZSB0aGUgZGF0YSAKICAgIGNvbG5hbWVzKGRmX291dCkgPC0gYyhzeW09c3ltYm9sLCBwYXN0ZTAoc3ltYm9sLCAiX2xvZ19yZXR1cm4iKSkKICB9IGVsc2V7CiAgICBkZl9vdXQgPSBkZgogIH0KICAjIFJldHVybiBkYXRhCiAgcmV0dXJuKGRmX291dCkKfQoKCmBgYAoKYGBge3J9CiMnIFB1bGwgdGhlIGRhdGEgYW5kIHJ1biB0aGUgQ0FWaWFSIGZ1bmN0aW9uIG9uIGl0CiMnCiMnIEBwYXJhbSBpbnB1dF9kYXRhIC0gZGF0YSB0byB1c2UgaW4gdGhlIGZ1bmN0aW9uCiMnIEBwYXJhbSByYW5nZV9kYXRhIC0gcmFuZ2Ugb2YgdGhlIGRhdGEgdG8gdXNlCiMnCiMnIEByZXR1cm4gLSBhIGxpc3Qgb2YgdmFsdWVzIGZyb20gdGhlIGNhdmlhciBmdW5jdGlvbgojJyBAZXhwb3J0CiMnCiMnIEBleGFtcGxlcyAtIGNhdmlhcl9wdWxsKHNweSkKY2F2aWFyX3B1bGwgPSBmdW5jdGlvbihpbnB1dF9kYXRhLCByYW5nZV9kYXRhID0gKDI6ZGltKGlucHV0X2RhdGEpWzFdKSl7CiAgIyBSdW4gdGhlIGNhdmlhciBkYXRhCiAgY2F2aWFyIDwtIGNhdmlhck9wdGltKGlucHV0X2RhdGFbcmFuZ2VfZGF0YSwyXSkKICByZXR1cm4oY2F2aWFyKQp9CgpgYGAKCgpgYGB7cn0KIycgRnVuY3Rpb24gZm9yIHByb2R1Y2luZyByb2xsaW5nIHByZWRpY3Rpb25zCiMnIE1vZGVsIDEgPSBTeW1tZXRyaWMgQWJzb2x1dGUgVmFsdWUsIDIgPSBBc3ltbWV0cmljIHNsb3BlLCAzID0gSW5kaXJlY3QgR0FSQ0gsIDQgPSBBZGFwdGl2ZQojJwojJyBAcGFyYW0gaW5wdXRfZGF0YSAtIGlucHV0IGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgZnVuY3Rpb24KIycgQHBhcmFtIHJhbmdlX2RhdGEgLSByYW5nZSBvZiB0aGUgZGF0YSB0byBjb25zaWRlcgojJyBAcGFyYW0gbmZjc3QgLSBudW1iZXIgb2YgZm9yZWNhc3RzIHRvIG1ha2UKIycgQHBhcmFtIG1vZGVsIC0gbW9kZWwgdG8gdXNlIChpbnRlZ2VycyAxIHRocm91Z2ggNCkuIERlZmF1bHRzIHRvIDEuIAojJyBAcGFyYW0gbGV2ZWwgLSBsZXZlbCBvZiBzaWduaWZpY2FuY2UgdG8gdXNlLgojJyBAcGFyYW0gRyAtIGFyZ3VtZW50IGZvciB0aGUgayBwYXJhbWV0ZXIgaW4gdGhlIDR0aCBtb2RlbCAoYWRhcHRpdmUpLiBEZWZhdWx0IGlzIDUKIycKIycgQHJldHVybiAtIGFuIHh0cyBvYmplY3Qgd2hpY2ggY29udGFpbnMgcm9sbGluZyBDQVZpYVIgcHJlZGljdGlvbnMKIycgQGV4cG9ydAojJwojJyBAZXhhbXBsZXMgLSByb2xsaW5nX3ByZWRpY3Rpb25zKHNweSwgbmZjc3QgPSAyMikKcm9sbGluZ19wcmVkaWN0aW9ucyA9IGZ1bmN0aW9uKGlucHV0X2RhdGEsIHJhbmdlX2RhdGEgPSAoMjpkaW0oaW5wdXRfZGF0YSlbMV0pLCBuZmNzdCA9IDI1MCwgbW9kZWwgPTEsIGxldmVsID0gMC4wMSwgRyA9IDUsIGNvbCA9IDIpewogICMgUnVuIHRoZSB2YXJwcmVkaWN0IGZ1bmN0aW9uCiAgdmFycHJlZGljdCA8LSByb2xsYXBwbHlyKGlucHV0X2RhdGFbcmFuZ2VfZGF0YSxjb2xdLCBsZW5ndGgocmFuZ2VfZGF0YSkgLSBuZmNzdCwgY2F2aWFyT3B0aW0sIG1vZGVsLCBsZXZlbCwgcHJlZGljdCA9IDEsIGsgPSBHKSAlPiUgbGFnCiAgIyBFbGltaW5hdGUgTkFzCiAgIyBwcmVkX25vX25hID0gbmEub21pdCh2YXJwcmVkaWN0KQogICMgUmV0dXJuIHRoZSBkYXRhCiAgIyByZXR1cm4ocHJlZF9ub19uYSkKICByZXR1cm4odmFycHJlZGljdCkKfQoKYGBgCgpgYGB7cn0KIycgRnVuY3Rpb24gdG8gQ2FsY3VsYXRlIExvc3MgZnJvbSB0aGUgYWJvdmUgcHJlZGljdGlvbnMKIycKIycgQHBhcmFtIHN5bWJvbCAtIHN5bWJvbCB0byB3b3JrIHdpdGggZnJvbSBxdWFudG1vZC4gTXVzdCBiZSBpbiBxdW90YXRpb25zIHRvIHdvcmsKIycgQHBhcmFtIHN0YXJ0X2R0IC0gc3RhcnQgZGF0ZSBvZiB0aGUgZGF0YSB0byBidWlsZCB0aGUgZm9yZWNhc3Qgb24gCiMnIEBwYXJhbSBlbmRfZHQgLSBlbmQgZGF0ZSBvZiB0aGUgZGF0YSB0byBidWlsZCB0aGUgZm9yZWNhc3Qgb24gIAojJyBAcGFyYW0gbmZjc3QgLSBudW1iZXIgb2YgZGF0YSBwb2ludHMgdG8gdXNlIGluIHRoZSBmb3JlY2FzdAojJyBAcGFyYW0gbW9kZWwgLSBtb2RlbCB0byB1c2UuIERlZmF1bHRzIHRvIDEKIycgQHBhcmFtIGxldmVsIC0gbGV2ZWwgb2Ygc2lnbmlmaWNhbmNlLiBEZWZhdWx0cyB0byAxJQojJyBAcGFyYW0gRyAtIGFyZ3VtZW50IGZvciB0aGUgayBwYXJhbWV0ZXIgaW4gdGhlIDR0aCBtb2RlbCAoYWRhcHRpdmUpLiBEZWZhdWx0IGlzIDUKIycKIycgQHJldHVybiAtIGxvc3MgdXNpbmcgYWJzb2x1dGUgdmFsdWUKIycgQGV4cG9ydCAtIGEgcGxvdCBvZiB0aGUgZGF0YQojJwojJyBAZXhhbXBsZXMKbG9zc19jYWxjX3V2ID0gZnVuY3Rpb24oc3ltYm9sLCBzdGFydF9kdCwgZW5kX2R0LCBuZmNzdCwgbW9kZWwgPSAxLCBsZXZlbCA9IDAuMDEsIEcgPSA1KXsKICAjIFB1bGwgaW4gdGhlIGRhdGEKICByYXdfZGF0YSA9IGRhdGFfcHVsbChzeW1ib2wsIHN0YXJ0X2RhdGUgPSBzdGFydF9kdCwgZW5kX2RhdGUgPSBlbmRfZHQpCiAgIyBGb3JlY2FzdCBiYXNlZCBvbiB0aGUgZGF0YQogIGZjc3QgPSBuYS5vbWl0KHJvbGxpbmdfcHJlZGljdGlvbnMocmF3X2RhdGEsIG5mY3N0ID0gbmZjc3QsIG1vZGVsID0gbW9kZWwsIGxldmVsID0gbGV2ZWwsIEcgPSBHKSkqKC0xKQogICMgRXh0cmFjdCBhY3R1YWxzCiAgYWN0ID0gdGFpbChyYXdfZGF0YSwgbiA9IG5mY3N0KVssMl0KICAjIEpvaW4gdGhlIHR3byB0b2dldGhlciBhbmQgcmVuYW1lCiAgam9pbiA9IG1lcmdlKGZjc3QsYWN0LGFsbD1UUlVFKQogIGNvbG5hbWVzKGpvaW4pIDwtIGMoIkZjc3RfVmFSIiwgIkFjdF9SZXR1cm4iKQogICMgcHJpbnQoam9pbikKICAjIENhbGN1bGF0ZSB0aGUgbG9zc2VzCiAgbG9zcyA9IGFicyhzdW0oaWZlbHNlKGFjdCA+IGZjc3QsIGxldmVsLCAoLTEpKigxLWxldmVsKSkpKQogICMgUGxvdCB0aGUgZGF0YQogIHBsb3QgPSBwbG90Lnh0cyhqb2luLCBjb2wgPSBjKCJyZWQiLCAiYmxhY2siKSwgbHR5ID0gYygyLDEpLCBtYWluID0gIkxvZyBSZXR1cm4gZnJvbSB0aGUgU1BZIHZzLiBGY3N0LiBWYVIiLGdyaWQuY29sID0gTkEsIGxlZ2VuZC5sb2MgPSAiYm90dG9tbGVmdCIpCiAgcmV0dXJuKGxpc3QobG9zcywgcGxvdCwgYWN0LCBmY3N0KSkKfQoKYGBgCgojIyBNViBDYXZpYXIgLSBQdWxsaW5nIHRoZSBkYXRhCgpgYGB7ciwgY2FjaGUgPSBUUlVFfQojJyBUaGlzIGlzIGEgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIGRhdGEgZnJhbWUgZm9yIHRoZSByZXNwb25zZSBhbmQgZXhwbGFuYXRvcnkgdmFyaWFibGVzIHRoYXQgd2UnbGwgZmVlZCBpbnRvIHRoZSBkaWZmdXNpb24gaW5kZXgKIycKIycgQHBhcmFtIHN5bWJvbF9saXN0IC0gYSBsaXN0IG9mIHN5bWJvbHMgcmVjb2duaXphYmxlIGJ5IHRoZSAKIycgQHBhcmFtIHJlc3BfdmFyIC0gdGhlIHJlc3BvbnNlIHZhcmlhYmxlIHdlJ2QgbGlrZSB0byBmb3JlY2FzdDsgZGVmYXVsdCBpcyBTUFkKIycgQHBhcmFtIGNvbXBsX2Nhc2UgLSBkZWZhdWx0cyB0byB0cnVlLi4ub25seSBpbmNsdWRlcyBjb21wbGV0ZSBjYXNlcyBpbiB0aGUgZGF0YQojJyBAcGFyYW0gYWRqX2Nsb3NlIC0gdXNlIGFkanVzdGVkIGNsb3NpbmcgcHJpY2VzIGZvciB0aGUgZXhwbGFuYXRvcnkgdmFyaWFibGVzPyBkZWZhdWx0IGlzIDEgZm9yIFlFUwojJyBAcGFyYW0gcmVzcF9hZGpfY2xvc2UgLSB1c2UgYWRqdXN0ZWQgY2xvc2luZyBwcmljZXMgZm9yIHRoZSBleHBsYW5hdG9yeSB2YXJpYWJsZXM/IGRlZmF1bHQgaXMgMSBmb3IgWUVTCiMnIEBwYXJhbSBzdGFydF9kYXRlIC0gc3RhcnRpbmcgZGF0YSB0byB1c2UKIycgQHBhcmFtIGVuZF9kYXRlIC0gZW5kaW5nIGRhdGUgb2YgdGhlIGRhdGEKIycgQHBhcmFtIGxhZ19wcmVkIC0gZG8gd2UgbGFnIHRoZSBwcmVkaWN0aW9ucz8gSXQgaXMgU1RST05HTFkgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGlzIDAKIycKIycgQHJldHVybiAtIGEgZGF0YSBmcmFtZSB3aGljaCBjYW4gYmUgZmVkIGludG8gdGhlIFNXZm9yZSBmdW5jdGlvbgojJyBAZXhwb3J0CiMnCiMnIEBleGFtcGxlcyAtIGRpZmZfaW5kZXhfZGYoYygiWExGIiwgIlhMRSIsICJQU0NUIiwgIlhMViIsICJWUFUiLCAiWExQIiwgIklHRiIsICJYV0VCIiwgIlBQVFkiKSkKZGlmZl9pbmRleF9kZiA9IGZ1bmN0aW9uKHN5bWJvbF9saXN0LCByZXNwX3ZhciA9ICJTUFkiLCBjb21wbF9jYXNlID0gMSwgYWRqX2Nsb3NlID0gMSwgcmVzcF9hZGpfY2xvc2UgPSAxLCBzdGFydF9kYXRlID0gIjE5MDAtMDEtMDEiLCBlbmRfZGF0ZSA9IFN5cy5EYXRlKCksIGxhZ19wcmVkID0gMSl7CiAgIyBQdWxsIGluIHJlc3BvbnNlIHZhcmlhYmxlCiAgcmVzcG9uc2VfcHVsbCA9IGdldFN5bWJvbHMocmVzcF92YXIsIGF1dG8uYXNzaWduID0gRkFMU0UsIGZyb20gPSBzdGFydF9kYXRlLCB0byA9IGVuZF9kYXRlKQogICMgR2V0IGFkanVzdGVkIGNsb3NpbmcgcHJpY2UKICBpZiAocmVzcF9hZGpfY2xvc2UgPT0gVFJVRSl7CiAgICBkaWZmX2RmID0gQWQocmVzcG9uc2VfcHVsbCkKICB9IGVsc2UgewogICAgZGlmZl9kZiA9IENsKHJlc3BvbnNlX3B1bGwpCiAgfQogICMgTG9vcCB0aHJvdWdoIHRoZSBzeW1ib2xzIGFuZCBqb2luIGluIGRhdGEKICBmb3IgKGkgaW4gMTpsZW5ndGgoc3ltYm9sX2xpc3QpKXsKICAgICMgUHVsbCBjbG9zaW5nIHByaWNlCiAgICBleHBsX3B1bGwgPSBnZXRTeW1ib2xzKHN5bWJvbF9saXN0W2ldLCBhdXRvLmFzc2lnbiA9IEZBTFNFLCBmcm9tID0gc3RhcnRfZGF0ZSwgdG8gPSBlbmRfZGF0ZSkKICAgICMgRXh0cmFjdCBjbG9zaW5nIHByaWNlIC0gNHRoIGVsZW1lbnQKICAgIGlmIChhZGpfY2xvc2UgPT0gVFJVRSl7CiAgICAgIGV4cGxfY2wgPSBBZChleHBsX3B1bGwpCiAgICB9IGVsc2UgewogICAgICBleHBsX2NsID0gQ2woZXhwbF9wdWxsKQogICAgfQogICAgIyBOZXcgY29kZSBmb3IgNC4xNi4yMDIwIC0gbGFnIHRoZSBleHBsYW5hdG9yeSB2YXJpYWJsZXMKICAgIGlmIChsYWdfcHJlZCA9PSBUUlVFKXsKICAgICAgIyBMYWcgdGhlIGV4cGxhbmF0b3J5IHZhcmlhYmxlcyBieSAxCiAgICAgIGxhZ19leHAgPSBsYWcoZXhwbF9jbCwgMSkKICAgICAgIyBBcHBlbmQgdGhlIGZpcnN0IGxhZyB0byB0aGUgZGF0YSBmcmFtZQogICAgICBkaWZmX2RmID0gbWVyZ2UoZGlmZl9kZiwgbGFnX2V4cCwgam9pbiA9ICJsZWZ0IiwgZmlsbCA9IE5BKQogICAgfSBlbHNlewogICAgICAjIFJldHVybiB0aGUgZGF0YSBmcmFtZSB3aXRob3V0IGxhZ3MKICAgICAgZGlmZl9kZiA9IG1lcmdlKGRpZmZfZGYsIGV4cGxfY2wsIGpvaW4gPSAibGVmdCIsIGZpbGwgPSBOQSkKICAgIH0KICB9CiAgaWYgKGxhZ19wcmVkID09IFRSVUUpewogICAgIyBDaG9wIG9mZiB0aGUgZmlyc3Qgcm93CiAgICBkaWZmX2RmID0gZGlmZl9kZlstMSxdCiAgfQogIGVsc2UgewogICAgcHJpbnQoIlBMRUFTRSBOT1RFIC0gdGhlIGV4cGxhbmF0b3J5IHZhcmlhYmxlcyBpbiB0aGlzIERGIGFyZSBOT1QgbGFnZ2VkLiBCZSBjYXJlZnVsIHRvIGF2b2lkIGxvb2stYWhlYWQgYmlhcyEiKQogIH0KICAjIFJldHVybiBjb21wbGV0ZSBjYXNlcyBvbmx5IAogIGlmIChjb21wbF9jYXNlID09IFRSVUUpewogICAgZGlmZl9kZl9vdXQgPSBkaWZmX2RmW2NvbXBsZXRlLmNhc2VzKGRpZmZfZGYpLCBdCiAgfSBlbHNlewogICAgZGlmZl9kZl9vdXQgPSBkaWZmX2RmCiAgfQogIAogIHJldHVybihkaWZmX2RmX291dCkKfQoKYGBgCgpgYGB7ciwgY2FjaGUgPSBUUlVFfQojJyBDb252ZXJ0cyBhIGRpZmZfZGYgaW50byBhIGRhdGEgZnJhbWUgd2l0aCBhcHByb3hpbWF0ZSBwZXJjZW50YWdlIGNoYW5nZXMgZGlmZihsb2coZGlmZl9kZikpCiMnCiMnIEBwYXJhbSBkaWZmX2RmIC0gb3V0cHV0IG9mIHRoZSBkaWZmX2luZGV4X2RmIGZ1bmN0aW9uIHdpdGggY29tcGxldGUgY2FzZXMKIycKIycgQHJldHVybiAtIHJldHVucyB0aGUgZGlmZmVyZW5jZWQgZGF0YQojJyBAZXhwb3J0CiMnCiMnIEBleGFtcGxlcyAtIHBjX2RpZmZfaW5kZXgodGVzdF9jb21wbCkgCgpwY19kaWZmX2luZGV4ID0gZnVuY3Rpb24oZGlmZl9kZil7CiAgIyBEaWZmZXJlbmNlIHRoZSBsb2cgb2YgdGhlIGRhdGEKICBwY19kaWZmX2luZGV4ID0gZGlmZihsb2coZGlmZl9kZikpCiAgIyBSZW1vdmUgdGhlIGZpcnN0IHJvdwogIHBjX2RpZmZfaW5kZXhfb3V0ID0gcGNfZGlmZl9pbmRleFstMSxdCiAgcmV0dXJuKHBjX2RpZmZfaW5kZXhfb3V0KQp9CgpgYGAKCiMjIE1WIENhdmlhciAtIE1vZGlmaWVkIERJIGNvZGUKClRoZSBjb2RlIHRoYXQgaXMgdXNlZCBpbiBhIGRpZmZ1c2lvbiBpbmRleCBtb2RlbCBpcyBhcyBmb2xsb3dzLiBUaGUga2V5IGlzIGZpZ3VyaW5nIG91dCB3aGVyZSB0byBtYWtlIHRoZSBleHRlbnNpb24uIEknbGwgZ28gdGhyb3VnaCBhbmQgY29tbWVudCBldmVyeXRoaW5nIGFuZCBzZWUgd2hhdCdzIHdoYXQuCgpgYGB7cn0KIycgQmVsb3cgaXMgdGhlIG1vZGlmaWVkIGRpZmZ1c2lvbiBpbmRleCBjb2RlLgojJwojJyBAcGFyYW0geSAtIHJlc3BvbnNlIHZhcmlhYmxlCiMnIEBwYXJhbSB4IC0gcHJlZGljdG9yIHZhcmlhYmxlcwojJyBAcGFyYW0gb3JpZyAtIGZvcmVjYXN0IG9yaWdpbgojJyBAcGFyYW0gbSAtIG51bWJlciBvZiBkaWZmdXNpb24gaW5kZXhlcyB1c2VkCiMnIEBwYXJhbSB0YXUgLSBWYVIgbGV2ZWwgdG8gdXNlOyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMQojJyBAcGFyYW0gZW5kIC0gc3BlY2lmaWVzIGFuIGFsdGVybmF0ZSBlbmRpbmcgdmFsdWUKIycgQHBhcmFtIHByaW50X21kbCAtIHByaW50IHRoZSBtb2RlbCBzdW1tYXJ5IGFuZCB0aGUgTVNFCiMnCiMnIEByZXR1cm4gLSByZXR1cm5zIGEgbGlzdCBvZiB2YXJpYWJsZXMgZm9yIHVzZSBpbiB0aGUgZGlmZnVzaW9uIGluZGV4CiMnIEBleHBvcnQKIycKIycgQGV4YW1wbGVzCm1vZF9kaSA9IGZ1bmN0aW9uICh5LCB4LCBvcmlnLCBtLCB0YXUsIGVuZCA9IE5VTEwsIHByaW50X21kbCA9IDApIAp7CiAgIyBDb252ZXJ0cyB0aGUgcmVzcG9uc2UgdmFyaWFibGVzIGludG8gYSBtYXRyaXgKICBpZiAoIWlzLm1hdHJpeCh4KSkgCiAgICAgIHggPSBhcy5tYXRyaXgoeCkKICAjIG5UIGlzIG51bWJlciBvZiB0IHRpbWUtc3RlcHMKICBuVCA9IGRpbSh4KVsxXQogICMgQWRkIGEgbGluZSB0byBlc3RhYmxpc2ggdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyB1c2VkIGluIHRoZSB0ZXN0LgogIGlmIChpcy5udWxsKGVuZCkgIT0gVFJVRSl7CiAgICBuVCA9IGVuZAogIH0KICAjIGsgaXMgdGhlIG51bWJlciBvZiBkaWZmdXNpb24gaW5kaWNlcyB1c2VkCiAgayA9IGRpbSh4KVsyXQogICMgU2FuaXR5IGNoZWNrcyB0byBlbnN1cmUgdGhhdCB0aGUgb3JpZ2luIGlzbid0IHBhc3QgdGhlIG51bWJlciBvZiB0aW1lIHBvaW50cwogIGlmIChvcmlnID4gblQpIAogICAgICBvcmlnID0gblQKICAjIE1ha2VzIHN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgbW9yZSBwcmVkaWN0b3JzIHRoYW4gdGhlcmUgdmFyaWFibGVzIGluIHRoZSBkYXRhc2V0CiAgaWYgKG0gPiBrKSAKICAgICAgbSA9IGsKICAjIE1ha2VzIHN1cmUgdGhlcmUgYXJlIGF0IGxlYXN0IHNvbWUgdmFyaWFibGVzCiAgaWYgKG0gPCAxKSAKICAgICAgbSA9IDEKICAjIFN1YmRpdmlkZXMgdGhlIGRhdGFmcmFtZQogIHgxID0geFsxOm9yaWcsIF0KICAjIENhbGN1bGF0ZXMgbWVhbnMgb2YgZWFjaCByb3cKICBtZSA9IGFwcGx5KHgxLCAyLCBtZWFuKQogICMgQ2FsY3VsYXRlcyBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIGVhY2ggY29sdW1uCiAgc2UgPSBzcXJ0KGFwcGx5KHgxLCAyLCB2YXIpKQogICMgQ3JlYXRlcyBhIG1hdHJpeCB4MSwgd2hpY2ggbm9ybWFsaXplcyBhbGwgdGhlIGNvbHVtbnMuIAogICMgVGhpcyBtYXkgYmUgYW4gaXNzdWUgc2luY2UgaXQgYXNzdW1lcyB0aGF0IHRoZSBkaXN0cmlidXRpb24gaXMgc3VmZmljaWVudGx5IGRlc2NyaWJlZCBieSB0aGUgZmlyc3QgdHdvIG1vbWVudHMKICB4MSA9IHgKICBmb3IgKGkgaW4gMTprKSB7CiAgICAgIHgxWywgaV0gPSAoeDFbLCBpXSAtIG1lW2ldKS9zZVtpXQogIH0KICBWMSA9IGNvdih4MVsxOm9yaWcsIF0pCiAgIyBQZXJmb3JtcyBhbiBlaWdlbiBkZWNvbXBvc2l0aW9uCiAgbTEgPSBlaWdlbihWMSkKICAjIFNlbGVjdHMgZWlnZW52YWx1ZXMKICBzZGV2ID0gbTEkdmFsdWVzCiAgIyBTZWxlY3RzIGVpZ2VudmVjdG9ycwogIE0gPSBtMSR2ZWN0b3JzCiAgIyBNYWtlcyBhIHNtYWxsZXIgbWF0cml4CiAgTTEgPSBNWywgMTptXQogICMgVGhpcyBpcyB0aGUgZGlmZnVzaW9uIGluZGV4IG1vZGVsIC0gW29yaWcgeCBwXSpbcCB4IG1dID0gW29yaWcgeCBtXQogIERpbmRleCA9IHgxICUqJSBNMQogICMgQ3V0IGRvd24gYm90aCB0aGUgcmVzcG9uc2UgYW5kIHByZWRpY3RvcnMgdG8gYmUgYSByZWFzb25hYmxlIHNpemUKICB5MSA9IHlbMTpvcmlnXQogIERGID0gRGluZGV4WzE6b3JpZywgXQogICMgQXBwbHkgdGhlIGxpbmVhciBtb2RlbCAtIEhFUkUgaXMgdGhlIGtleS4KICAjIG1tID0gbG0oeTEgfiBERikgLSBvbGQgZnVuY3Rpb24KICBtbSA9IHJxKHkxIH4gREYsIHRhdSA9IHRhdSkKICAjIFByaW50IHRoZSBkYXRhCiAgaWYgKHByaW50X21kbCA9PSAxKXsKICAgIHByaW50KHN1bW1hcnkobW0pKQogIH0KICAjIFB1dHMgY29lZmZpY2llbnRzIGluIGEgbWF0cml4CiAgY29lZiA9IG1hdHJpeChtbSRjb2VmZmljaWVudHMsIChtICsgMSksIDEpCiAgIyBJbml0aWFsaXplcyB5aGF0IHZhcmlhYmxlcyBhbmQgTVNFCiAgeWhhdCA9IE5VTEwKICBNU0UgPSBOVUxMCiAgaWYgKG9yaWcgPCBuVCkgewogICAgIyBDcmVhdGVzIGEgbmZjc3QgYnkgKG0rMSkgbWF0cml4CiAgICBuZXd4ID0gY2JpbmQocmVwKDEsIChuVCAtIG9yaWcpKSwgRGluZGV4WyhvcmlnICsgMSk6blQsIAogICAgICAgIF0pCiAgICAjIFtuZmNzdHgobSsxKV0qWyhtKzEpeDFdID0gW25mY3N0eDFdCiAgICB5aGF0ID0gbmV3eCAlKiUgY29lZgogICAgIyBDYWxjdWxhdGVzIGVycm9ycwogICAgZXJyID0geVsob3JpZyArIDEpOm5UXSAtIHloYXQKICAgIE1TRSA9IG1lYW4oZXJyXjIpCiAgICBpZiAocHJpbnRfbWRsID09IDEpewogICAgICBjYXQoIk1TRSBvZiBvdXQtb2Ytc2FtcGxlIGZvcmVjYXN0czogIiwgTVNFLCAiXG4iKQogICAgfQogIH0KICBTV2ZvcmUgPC0gbGlzdChjb2VmID0gY29lZiwgeWhhdCA9IHloYXQsIE1TRSA9IE1TRSwgbG9hZGluZ3MgPSBNMSwgCiAgICAgIERGaW5kZXggPSBEaW5kZXgpCn0KCmBgYAoKTm93IHRoYXQgd2UgaGF2ZSB0aGUgZnVuY3Rpb24sIGxldCdzIHNlZSBpZiB3ZSBjYW4gZ2V0IGl0IHRvIHdvcmsuIEZpcnN0LCB3ZSdsbCBuZWVkIHRvIGNvbXBpbGUgYWxsIG9mIG91ciBkYXRhCgpMZXQncyBhZGQgYSBjb2RlIHdoaWNoIGluY29ycG9yYXRlcyB0aGUgcHJldmlvdXMgdmFsdWVzIG9mIHRoZSByZXR1cm4uCgpgYGB7cn0KIycgQmVsb3cgaXMgdGhlIG1vZGlmaWVkIGRpZmZ1c2lvbiBpbmRleCBjb2RlIHRvIGluY2x1ZGUgbGFnZ2VkIHZhcmlhYmxlcy4KIycKIycgQHBhcmFtIHkgLSByZXNwb25zZSB2YXJpYWJsZQojJyBAcGFyYW0geCAtIHByZWRpY3RvciB2YXJpYWJsZXMKIycgQHBhcmFtIG9yaWcgLSBmb3JlY2FzdCBvcmlnaW4KIycgQHBhcmFtIG0gLSBudW1iZXIgb2YgZGlmZnVzaW9uIGluZGV4ZXMgdXNlZAojJyBAcGFyYW0gdGF1IC0gVmFSIGxldmVsIHRvIHVzZTsgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEKIycgQHBhcmFtIGFyX3RmIC0gQVIgdHJhbnNmb3JtYXRpb24gdHlwZS4gKDEgLSBubyB0cmFuc2Zvcm1hdGlvbiwKIycgMiAtIGFic29sdXRlIHZhbHVlLCAzIC0gYXN5bW1ldHJpYyBzbG9wZSkKIycgQHBhcmFtIHAgLSBudW1iZXIgb2YgQVIgbGFncyB0byBpbmNsdWRlLiBEZWZhdWx0IGlzIG9uZS4KIycgQHBhcmFtIHByaW50X21kbCAtIG9wdGlvbiB0byBwcmludCB0aGUgbW9kZWwgc3VtbWFyeSB0byBtYWtlIHN1cmUgZXZlcnl0bmluZyBpcyBvay4gMCBpcyBkZWZhdWx0LgojJyBAcGFyYW0gbW9kZWwgLSBtb2RlbCB0eXBlICgxIC0gU0FWLCAyIC0gQVMsIDMgLSBHQVJDSCwgNCAtIEFEQVBUSVZFKSAKIycKIycgQHJldHVybiAtIHJldHVybnMgYSBsaXN0IG9mIHZhcmlhYmxlcyBmb3IgdXNlIGluIHRoZSBkaWZmdXNpb24gaW5kZXgKIycgQGV4cG9ydAojJwojJyBAZXhhbXBsZXMKbW9kX2RpX3dsID0gZnVuY3Rpb24gKHksIHgsIG9yaWcsIG0sIHRhdSwgYXJfdGYgPSAxLCBwID0gMSwgcHJpbnRfbWRsID0gMCwgbW9kZWwgPSAxLCBlbmQgPSBOVUxMKSAKewogICMgQ29udmVydHMgdGhlIHJlc3BvbnNlIHZhcmlhYmxlcyBpbnRvIGEgbWF0cml4CiAgaWYgKCFpcy5tYXRyaXgoeCkpIAogICAgICB4ID0gYXMubWF0cml4KHgpCiAgIyBuVCBpcyBudW1iZXIgb2YgdCB0aW1lLXN0ZXBzCiAgblQgPSBkaW0oeClbMV0KICAjIEFkZCBhIGxpbmUgdG8gZXN0YWJsaXNoIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgdXNlZCBpbiB0aGUgdGVzdC4KICBpZiAoaXMubnVsbChlbmQpICE9IFRSVUUpewogICAgblQgPSBlbmQKICB9CiAgIyBrIGlzIHRoZSBudW1iZXIgb2YgZGlmZnVzaW9uIGluZGljZXMgdXNlZAogIGsgPSBkaW0oeClbMl0KICAjIFNhbml0eSBjaGVja3MgdG8gZW5zdXJlIHRoYXQgdGhlIG9yaWdpbiBpc24ndCBwYXN0IHRoZSBudW1iZXIgb2YgdGltZSBwb2ludHMKICBpZiAob3JpZyA+IG5UKSAKICAgICAgb3JpZyA9IG5UCiAgIyBNYWtlcyBzdXJlIHRoYXQgdGhlcmUgYXJlbid0IG1vcmUgcHJlZGljdG9ycyB0aGFuIHRoZXJlIHZhcmlhYmxlcyBpbiB0aGUgZGF0YXNldAogIGlmIChtID4gaykgCiAgICAgIG0gPSBrCiAgIyBNYWtlcyBzdXJlIHRoZXJlIGFyZSBhdCBsZWFzdCBzb21lIHZhcmlhYmxlcwogIGlmIChtIDwgMSkgCiAgICAgIG0gPSAxCiAgIyBTdWJkaXZpZGVzIHRoZSBkYXRhZnJhbWUKICB4MSA9IHhbMTpvcmlnLCBdCiAgIyBDYWxjdWxhdGVzIG1lYW5zIG9mIGVhY2ggcm93CiAgbWUgPSBhcHBseSh4MSwgMiwgbWVhbikKICAjIENhbGN1bGF0ZXMgc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiBlYWNoIGNvbHVtbgogIHNlID0gc3FydChhcHBseSh4MSwgMiwgdmFyKSkKICAjIENyZWF0ZXMgYSBtYXRyaXggeDEsIHdoaWNoIG5vcm1hbGl6ZXMgYWxsIHRoZSBjb2x1bW5zLiAKICAjIFRoaXMgbWF5IGJlIGFuIGlzc3VlIHNpbmNlIGl0IGFzc3VtZXMgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGlzIHN1ZmZpY2llbnRseSBkZXNjcmliZWQgYnkgdGhlIGZpcnN0IHR3byBtb21lbnRzCiAgeDEgPSB4CiAgZm9yIChpIGluIDE6aykgewogICAgICB4MVssIGldID0gKHgxWywgaV0gLSBtZVtpXSkvc2VbaV0KICB9CiAgVjEgPSBjb3YoeDFbMTpvcmlnLCBdKQogICMgUGVyZm9ybXMgYW4gZWlnZW4gZGVjb21wb3NpdGlvbgogIG0xID0gZWlnZW4oVjEpCiAgIyBTZWxlY3RzIGVpZ2VudmFsdWVzCiAgc2RldiA9IG0xJHZhbHVlcwogICMgU2VsZWN0cyBlaWdlbnZlY3RvcnMKICBNID0gbTEkdmVjdG9ycwogICMgTWFrZXMgYSBzbWFsbGVyIG1hdHJpeAogIE0xID0gTVssIDE6bV0KICAjIFRoaXMgaXMgdGhlIGRpZmZ1c2lvbiBpbmRleCBtb2RlbCAtIFtvcmlnIHggcF0qW3AgeCBtXSA9IFtvcmlnIHggbV0KICBEaW5kZXggPSB4MSAlKiUgTTEKICAjIEN1dCBkb3duIGJvdGggdGhlIHJlc3BvbnNlIGFuZCBwcmVkaWN0b3JzIHRvIGJlIGEgcmVhc29uYWJsZSBzaXplCiAgeTEgPSB5WzE6b3JpZ10KICBERiA9IERpbmRleFsxOm9yaWcsIF0KICAjIENvcHkgdGhlIGRhdGEgZnJhbWUKICBERl93bCA9IERpbmRleAogICMgTGFnIHRoZSB5LXZhcmlhYmxlCiAgZm9yIChpIGluIDE6cCl7CiAgICAjIENyZWF0ZSBhIGxhZ2dlZCB2YXJpYWJsZQogICAgbGFnX3ZhciA9IGxhZyh5LCBpKQogICAgIyBBcHBlbmQgdGhlIGZpcnN0IGxhZyB0byB0aGUgZGF0YSBmcmFtZQogICAgREZfd2wgPSBjYmluZChERl93bCxsYWdfdmFyKQogIH0KICAjIElkZW50aWZ5IHRoZSByaWdodCBjb2x1bW5zCiAgbF9hciA9IG5jb2woREZfd2wpCiAgZl9hciA9IGxfYXIgLSBwICsgMQogICMgS2VlcCB0aGUgbGFzdCBjb2x1bW5zIGtlcHQgdG8gdGhlIHNpZGUKICBhbGxfbGFnID0gREZfd2xbLChmX2FyOmxfYXIpXQogICMgQ3V0IG9mZiB0aGUgZmlyc3Qgcm93IHRvIGF2b2lkIE5BJ3MKICBERl90cmltID0gREZfd2xbMTpvcmlnLF0KICAjIFJlbmFtZSB0aGUgY29sdW1ucwogICMgSGVyZSdzIHRoZSBuZXcgZnVuY3Rpb24gd2l0aCBhbiB1bnRyYW5zZm9ybWVkIEFSKHApIGxhZwogIGlmIChhcl90ZiA9PSAxKXsKICAgICMgSW5jb3Jwb3JhdGUgZXZlcnl0aGluZyBpbiB0byBhbiBpbnB1dCBkYXRhIGZyYW1lCiAgICBkZl9pbiA9IGNiaW5kKHkxWy0oMTpwKV0sIERGX3RyaW1bLSgxOnApLF0pCiAgICAjIFJlbmFtZSB0aGUgY29sdW1ucwogICAgIyBJbml0aWFsaXplIGEgY2hhcmFjdGVyIHZlY3RvcgogICAgbnZlYyA9IGMocmVwKDAsIDErbStwKSkKICAgICMgUG9wdWxhdGUgdGhlIHZlY3RvciAtIGZpcnN0IHZhbHVlIGlzIHRoZSByZXNwb25zZQogICAgbnZlY1sxXSA8LSBuYW1lcyh5KQogICAgIyBOZXh0IGFyZSB0aGUgZGlmZnVzaW9uIGluZGljZXMKICAgIGZvciAoaSBpbiAxOm0pewogICAgICBudmVjW2krMV0gPSBwYXN0ZTAoIkRpZmZfSW5kZXhfIiwgaSkKICAgIH0KICAgICMgTmV4dCBhcmUgdGhlIGxhZ2dlZCB2YXJpYWJsZXMKICAgIGZvciAoaSBpbiAxOnApewogICAgICBudmVjW2krMSttXSA9IHBhc3RlMCgiTGFnXyIsIGkpCiAgICB9CiAgICAjIEFzc2lnbiB0aGUgbmFtZXMKICAgIG5hbWVzKGRmX2luKSA8LSBudmVjCiAgICAjIFJ1biB0aGUgbW9kZWwKICAgIG1tID0gcnEoZGZfaW5bLDFdIH4gZGZfaW5bLC0xXSwgdGF1ID0gdGF1KQogIH0KICAjIEhlcmUncyB0aGUgbmV3IGZ1bmN0aW9uIHdpdGggYW4gU0FWIEFSKHApIGxhZwogIGlmIChhcl90ZiA9PSAyKXsKICAgICMgSW5jb3Jwb3JhdGUgZXZlcnl0aGluZyBpbiB0byBhbiBpbnB1dCBkYXRhIGZyYW1lCiAgICBkZl9pbiA9IGNiaW5kKHkxWy0oMTpwKV0sIERGX3RyaW1bLSgxOnApLC0oZl9hcjpsX2FyKV0sIGFicyhERl90cmltWy0oMTpwKSwoZl9hcjpsX2FyKV0pKQogICAgIyBSZW5hbWUgdGhlIGNvbHVtbnMKICAgICMgSW5pdGlhbGl6ZSBhIGNoYXJhY3RlciB2ZWN0b3IKICAgIG52ZWMgPSBjKHJlcCgwLCAxK20rcCkpCiAgICAjIFBvcHVsYXRlIHRoZSB2ZWN0b3IgLSBmaXJzdCB2YWx1ZSBpcyB0aGUgcmVzcG9uc2UKICAgIG52ZWNbMV0gPC0gbmFtZXMoeSkKICAgICMgTmV4dCBhcmUgdGhlIGRpZmZ1c2lvbiBpbmRpY2VzCiAgICBmb3IgKGkgaW4gMTptKXsKICAgICAgbnZlY1tpKzFdID0gcGFzdGUwKCJEaWZmX0luZGV4XyIsIGkpCiAgICB9CiAgICAjIE5leHQgYXJlIHRoZSBsYWdnZWQgdmFyaWFibGVzCiAgICBmb3IgKGkgaW4gMTpwKXsKICAgICAgbnZlY1tpKzErbV0gPSBwYXN0ZTAoIkxhZ18iLCBpKQogICAgfQogICAgIyBBc3NpZ24gdGhlIG5hbWVzLiBOb3RlIHRoYXQgdGhpcyBpcyBhIG1hdHJpeAogICAgbmFtZXMoZGZfaW4pIDwtIG52ZWMKICAgICMgUnVuIHRoZSBtb2RlbAogICAgbW0gPSBycShkZl9pblssMV0gfiBkZl9pblssLTFdLCB0YXUgPSB0YXUpCiAgfQogICMgSGVyZSdzIHRoZSBuZXcgZnVuY3Rpb24gd2l0aCBhbiBhc3ltbWV0cmljIHNsb3BlIGZvciB0aGUgQVIoMSkgbGFnCiAgIyBJbmRpY2F0b3I7IDAgaWYgcGVyY2VudCBjaGFuZ2UgaXMgbmVnYXRpdmUsIDEgaWYgaXQncyBwb3NpdGl2ZQogICMgaW5kaSA9IGlmZWxzZShERl90cmltWyxhcl0gPCAwLCAwLCAxKQogIGlmIChhcl90ZiA9PSAzKXsKICAgICMgQ3JlYXRlIGEgbWF0cml4IG9mIGluZGljYXRvcnMKICAgIGluZGlfbWF0ID0gbWF0cml4KDAsIG5yb3coREZfd2wpLCBwKQogICAgIyBHZW5lcmFsaXplIHRoZSBhYm92ZSBjb2RlCiAgICBmb3IgKGkgaW4gMTpwKXsKICAgICAgIyBQb3B1bGF0ZSB0aGUgaW5kaWNhdG9yCiAgICAgIGluZGlfbWF0WyxpXSA9IGlmZWxzZShERl93bFssZl9hciArIGkgLSAxXSA8IDAsIDAsIDEpCiAgICB9CiAgfQogICMgRml0dGluZyB0aGUgcmVncmVzc2lvbgogIGlmIChhcl90ZiA9PSAzKXsKICAgICMgSW5jb3Jwb3JhdGUgZXZlcnl0aGluZyBpbiB0byBhbiBpbnB1dCBkYXRhIGZyYW1lCiAgICBkZl9pbiA9IGNiaW5kKHkxWy0oMTpwKV0sIERGX3RyaW1bLSgxOnApLC0oZl9hcjpsX2FyKV0sIERGX3RyaW1bLSgxOnApLChmX2FyOmxfYXIpXSwgaW5kaV9tYXRbKChwKzEpOm9yaWcpLF0pCiAgICAjIFJlbmFtZSB0aGUgY29sdW1ucwogICAgIyBJbml0aWFsaXplIGEgY2hhcmFjdGVyIHZlY3RvcgogICAgbnZlYyA9IGMocmVwKDAsIDErbSsyKnApKQogICAgIyBQb3B1bGF0ZSB0aGUgdmVjdG9yIC0gZmlyc3QgdmFsdWUgaXMgdGhlIHJlc3BvbnNlCiAgICBudmVjWzFdIDwtIG5hbWVzKHkpCiAgICAjIE5leHQgYXJlIHRoZSBkaWZmdXNpb24gaW5kaWNlcwogICAgZm9yIChpIGluIDE6bSl7CiAgICAgIG52ZWNbaSsxXSA9IHBhc3RlMCgiRGlmZl9JbmRleF8iLCBpKQogICAgfQogICAgIyBOZXh0IGFyZSB0aGUgbGFnZ2VkIHZhcmlhYmxlcwogICAgZm9yIChpIGluIDE6cCl7CiAgICAgIG52ZWNbaSsxK21dID0gcGFzdGUwKCJMYWdfIiwgaSkKICAgIH0KICAgICMgTGFzdCBhcmUgdGhlIHBvc2l0aXZlIGluZGljYXRvciB2YXJpYWJsZXMKICAgIGZvciAoaSBpbiAxOnApewogICAgICBudmVjW2krMSttK3BdID0gcGFzdGUwKCJQb3NfVmFsX2Zvcl9MYWdfIiwgaSkKICAgIH0KICAgICMgQXNzaWduIHRoZSBuYW1lcy4gTm90ZSB0aGF0IHRoaXMgaXMgYSBtYXRyaXgKICAgIG5hbWVzKGRmX2luKSA8LSBudmVjCiAgICAjIFJ1biB0aGUgbW9kZWwKICAgIG1tID0gcnEoZGZfaW5bLDFdIH4gZGZfaW5bLC0xXSwgdGF1ID0gdGF1KQogICAgIyBtbSA9IHJxKHkxWy0oMTpwKV0gfiBERl90cmltWy0oMTpwKSwtKGZfYXI6bF9hcildICsgREZfdHJpbVstKDE6cCksKGZfYXI6bF9hcildICsgaW5kaV9tYXRbKChwKzEpOm9yaWcpLF0sIHRhdSA9IHRhdSkKICAgICMgQWRkIGEgZGlmZmVyZW50IGxpbmUgdG8gYWNjb3VudCBmb3IgdGhlIGluZGljYXRvciB2YXJpYWJsZQogICAgIyBpbnRlcmNlcHQgKyBtICsgMipubGFnIHRvIGFjY291bnQgZm9yIHRoZSBudW1iZXIgb2YgaW5kaWNhdG9yIHZhcmlhYmxlcwogICAgY29lZiA9IG1hdHJpeChtbSRjb2VmZmljaWVudHMsICgxICsgbSArIDIqcCksIDEpCiAgfQogIGlmIChwcmludF9tZGwgPT0gMSl7CiAgICBwcmludChzdW1tYXJ5KG1tKSkKICB9CiAgIyBQdXRzIGNvZWZmaWNpZW50cyBpbiBhIG1hdHJpeCAtIGFkZGVkIHRoZSBBUiB0ZXJtcwogICMgY29lZiA9IG1hdHJpeChtbSRjb2VmZmljaWVudHMsIChtICsgMSksIDEpCiAgaWYgKGFyX3RmICE9IDMpewogICAgY29lZiA9IG1hdHJpeChtbSRjb2VmZmljaWVudHMsICgxICsgbSArIHApLCAxKQogIH0KICAjIEluaXRpYWxpemVzIHloYXQgdmFyaWFibGVzIGFuZCBNU0UKICB5aGF0ID0gTlVMTAogIGxvc3MgPSBOVUxMCiAgaWYgKG9yaWcgPCBuVCkgewogICAgIyBDcmVhdGVzIGEgbmZjc3QgYnkgKG0rMikgbWF0cml4CiAgICAjIEFkZCBvbiB0aGUgbGFnZ2VkIHZhcmlhYmxlcwogICAgbmV3eCA9IGNiaW5kKHJlcCgxLCAoblQgLSBvcmlnKSksIERpbmRleFsob3JpZyArIDEpOm5ULCBdLCBhbGxfbGFnWyhvcmlnKzEpOm5ULF0pCiAgICAjIEluY29ycG9yYXRlIGxhZ2dlZCB2YXJpYWJsZXMKICAgIGlmIChhcl90ZiA9PSAzKXsKICAgICAgbmV3eCA9IGNiaW5kKHJlcCgxLCAoblQgLSBvcmlnKSksIERpbmRleFsob3JpZyArIDEpOm5ULCBdLCBhbGxfbGFnWyhvcmlnKzEpOm5ULF0sIGluZGlfbWF0WyhvcmlnKzEpOm5ULF0pCiAgICB9CiAgICAjIFtuZmNzdHgobSsxKV0qWyhtKzEpeDFdID0gW25mY3N0eDFdCiAgICB5aGF0ID0gbmV3eCAlKiUgY29lZgogICAgIyBDYWxjdWxhdGVzIGVycm9ycwogICAgbG9zcyA9IGFicyhzdW0oaWZlbHNlKHlbKG9yaWcgKyAxKTpuVF0gPiB5aGF0LCB0YXUsICgtMSkqKDEtdGF1KSkpKQogICAgIyBNb2RpZnlpbmcgdGhpcyBwYXJ0IHRvIG9ubHkgcHJpbnQgdGhpcyBpZiBzcGVjaWZpZWQKICAgIGlmIChwcmludF9tZGwgPT0gMSl7CiAgICAgIGNhdCgiTG9zc2VzIG9mIG91dC1vZi1zYW1wbGUgZm9yZWNhc3RzOiAiLCBsb3NzLCAiXG4iKQogICAgfQogIH0KICBTV2ZvcmUgPC0gbGlzdChjb2VmID0gY29lZiwgeWhhdCA9IHloYXQsIGxvc3MgPSBsb3NzLCBsb2FkaW5ncyA9IE0xLCAKICAgICAgREZpbmRleCA9IERpbmRleCwgbmFtZV92ZWN0b3IgPSBudmVjKQp9CgpgYGAKCgoKIyMgTVYgQ2F2aWFyIC0gQ2FsY3VhdGluZyBsb3NzZXMKCmBgYHtyfQojIERlY2lkZSBvbiB0aGUgb3B0aW1hbCBudW1iZXIgb2YgdmVjdG9ycy4KCiMgKHksIHgsIG9yaWcsIG0sIHRhdSkgCgojJyBGdW5jdGlvbiB0aGF0IGNhbGN1bGF0ZXMgbG9zcyBvdmVyIGEgZ2l2ZW4gcGVyaW9kIG9mIHRpbWUgZm9yIHRoZSBkaWZmdXNpb24gaW5kZXggbW9kZWwKIycKIycgQHBhcmFtIHkgLSByZXNwb25zZSB2YXJpYWJsZXMKIycgQHBhcmFtIHggLSBleHBsYW5hdG9yeSB2YXJpYWJsZQojJyBAcGFyYW0gb3JpZyAtIGZvcmVjYXN0IG9yaWdpbgojJyBAcGFyYW0gZW5kIC0gZm9yZWNhc3RpbmcgZW5kaW5nLiBOb3RlOiBhcyB0aGUgZnVuY3Rpb24gaXMgY3VycmVudGx5IHdyaXR0ZW4gb24gMi8yNCwgdGhpcyBvcHRpb24gZG9lc24ndCBkbyBhbnl0aGluZy4KIycgQHBhcmFtIG0gLSBudW1iZXIgb2YgZGlmZnVzaW9uIGluZGljZXMgdG8gdXNlCiMnIEBwYXJhbSB0YXUgLSBWYVIgbGV2ZWwKIycgQHBhcmFtIG1vZF9kaSAtIHVzZSB0aGUgbW9kaWZpZWQgREk/CiMnCiMnIEByZXR1cm4gLSByZXR1cm5zIGEgbGlzdCBvZiB0aGUgbG9zcyBzdW0gYW5kIHRoZSBsb3NzIHZlY3RvcgojJyBAZXhwb3J0CiMnCiMnIEBleGFtcGxlcyAtIGxvc3NfY2FsYyhwY19kZlssMV0sIHBjX2RmWywtMV0sIDc1NywgMTAyNywgMSwgMC4wMSkKbG9zc19jYWxjID0gZnVuY3Rpb24oeSwgeCwgb3JpZywgbSwgdGF1LCBtb2RfZGkgPSAwLCBhcl90ZiA9IDEsIHAgPSAxLCBwcmludF9tZGwgPSAwLCBtb2RlbCA9IDEsIGVuZCA9IE5VTEwpewogICMgRXh0cmFjdCB5X2hhdCB2YWx1ZXMKICBpZiAobW9kX2RpID09IDApewogICAgZGkgPSBtb2RfZGkoeT15LHg9eCxvcmlnPW9yaWcsbT1tLCB0YXU9dGF1LCBlbmQgPSBlbmQsIHByaW50X21kbCA9IHByaW50X21kbCkKICB9CiAgZWxzZSB7CiAgICBkaSA9IG1vZF9kaV93bCh5PXkseD14LG9yaWc9b3JpZyxtPW0sIHRhdT10YXUsIGFyX3RmID0gYXJfdGYsIHAgPSBwLCBwcmludF9tZGwgPSBwcmludF9tZGwsIG1vZGVsID0gbW9kZWwsIGVuZCA9IGVuZCkKICB9CiAgIyBtb2RfZGlfd2wgPSBmdW5jdGlvbiAoeSwgeCwgb3JpZywgbSwgdGF1LCBhcl90ZiA9IDEsIHAgPSAxLCBwcmludF9tZGwgPSAwLCBtb2RlbCA9IDEpCiAgeWhhdCA9IGRpJHloYXRbMTooZW5kLW9yaWcpXQogICMgQ2FsY3VsYXRlIHRoZSBsb3NzCiAgIyBJbml0aWFsaXplIGxvc3MgdmVjdG9yCiAgbHZlYyA9IHJlcCgwLChlbmQtb3JpZykpCiAgIyBUYWtlIHRoZSBkaWZmZXJlbmNlCiAgZm9yIChpIGluIDE6KGVuZC1vcmlnKSl7CiAgICAjIENhbGN1bGF0ZSBhbiBpbmRpY2F0b3IgdmFyaWFibGUKICAgIGluZCA9IGlmZWxzZSh5W29yaWcraV0gPCB5aGF0W2ldLCAxLDApCiAgICAjIFVzZSBpbmRpY2F0b3IgaW4gZnVuY3Rpb24gYmVsb3cKICAgIGx2ZWNbaV0gPSAodGF1IC0gaW5kKSooeVtvcmlnK2ldIC0geWhhdFtpXSkKICB9CiAgIyBBZGQgdXAgdGhlIGxvc3NlcyAtIGNoYW5nZSB0byBsb29rIGF0IHN1bSBvZiBsb3NzZXMuIFdvbid0IGNoYW5nZSBkZWNpc2lvbiBjcml0ZXJpb24KICBzdW1sb3NzID0gc3VtKGx2ZWMpCiAgIyBzdW1sb3NzID0gc3VtKGx2ZWMpL2xlbmd0aChsdmVjKQogIHJldHVybihsaXN0KHN1bWxvc3MsbHZlYykpCn0KCgpgYGAKCgoKIyMgTVYgQ2F2aWFyIC0gQ2hvb3NpbmcgdGhlIG9wdGltYWwgbnVtYmVyIG9mIHByZWRpY3RvcnMKCmBgYHtyfQojJyBGdW5jdGlvbiB0aGF0IHNlbGVjdHMgdGhlIG9wdGltYWwgbnVtYmVyIG9mIHByZWRpY3RvcnMKIycKIycgQHBhcmFtIHkgLSByZXNwb25zZSB2ZWN0b3IKIycgQHBhcmFtIHggLSBwcmVkaWN0b3IgdmFyaWFibGVzCiMnIEBwYXJhbSBvcmlnIC0gZm9yZWNhc3Qgb3JpZ2luCiMnIEBwYXJhbSBlbmQgLSBlbmRpbmcgb2YgdmFsaWRhdGlvbiBzZXQKIycgQHBhcmFtIHRhdSAtIFZhUiBpbiBxdWVzdGlvbgojJyBAcGFyYW0gbG93X20gLSBsb3cgdmFsdWUgb2YgbSB0byBjb25zaWRlcgojJyBAcGFyYW0gaGlnaF9tIC0gaGlnaCB2YWx1ZSBvZiBtIHRvIGNvbnNpZGVyCiMnCiMnIEByZXR1cm4gLSByZXR1cm5zIHRoZSBvcHRpbWFsIHZhbHVlIG9mIG0KIycgQGV4cG9ydAojJwojJyBAZXhhbXBsZXMgLSBvcHRfbShwY19kZlssMV0sIHBjX2RmWywtMV0sIDc1NywgMTAyNywgMC4wMSwgbG93X20gPTEsIGhpZ2hfbSAgPSA1KQpvcHRfbSA9IGZ1bmN0aW9uKHksIHgsIG9yaWcsIGVuZCA9IE5VTEwsIHRhdSwgbG93X20gPSAxLCBoaWdoX20sIG1vZF9kaSA9IDAsIGFyX3RmID0gMSwgcCA9IDEsIHByaW50X21kbCA9IDAsIG1vZGVsID0gMSwgcm93bmFtZSA9IE5VTEwpewogICMgSW5pdGlhbGl6ZSBhIGxvc3MgdmVjdG9yCiAgbG9zc192ZWMgPSByZXAoMCxoaWdoX20tbG93X20gKyAxKQogICMgSW5pdGlhbGl6ZSBhbiBtIHZlY3RvcgogIG1fdmVjID0gc2VxKGxvd19tLCBoaWdoX20sIGJ5ID0gMSkKICAjIExvb3AgdGhyb3VnaCBhbmQgcG9wdWxhdGUgdGhlIGxvc3MgdmVjdG9yCiAgZm9yIChpIGluIDE6bGVuZ3RoKGxvc3NfdmVjKSl7CiAgICBsb3NzX3ZlY1tpXSA9IHF1aWV0KGxvc3NfY2FsYyh5PXkseD14LG9yaWc9b3JpZyxlbmQ9ZW5kLCBtID0gbV92ZWNbaV0sIHRhdSA9IHRhdSwgbW9kX2RpID0gbW9kX2RpLCBhcl90ZiA9IGFyX3RmLCBwID0gcCwgcHJpbnRfbWRsID0gcHJpbnRfbWRsLCBtb2RlbCA9IG1vZGVsKSlbWzFdXQogIH0KICAjIEZpbmQgdGhlIG1pbmltaXplcgogIG9wdF9tID0gd2hpY2gubWluKGxvc3NfdmVjKQogIG9wdF9wID0gTkEKICAjIENvbWJpbmUgaW50byBhIGRhdGEgZnJhbWUKICBkZiA9IGFzLmRhdGEuZnJhbWUoY2JpbmQob3B0X20sIG9wdF9wKSkKICBuYW1lcyhkZikgPC0gYygiT3B0aW1hbCBtIiwgIk9wdGltYWwgcCIpCiAgIyBBc3NpZ24gYSByb3duYW1lCiAgaWYgKGlzLm51bGwocm93bmFtZSkgPT0gVFJVRSl7CiAgICAjIFdyaXRlIHRoZSByb3cgbmFtZXMKICAgIHJvd25hbWVzKGRmKSA8LSBjKCJNViBDQVZpYVIiKQogIH0KICBlbHNlIHsKICAgIHJvd25hbWVzKGRmKSA8LSByb3duYW1lCiAgfQogICMgUmV0dXJuIHRoZSBsb3NzX3ZlY3RvciBhbmQgdGhlIG1pbmltemVyCiAgcmV0dXJuKGxpc3Qob3B0X20sIGxvc3NfdmVjLCBkZikpCn0KYGBgCgpgYGB7cn0KIycgRnVuY3Rpb24gdGhhdCBzZWxlY3RzIHRoZSBvcHRpbWFsIG51bWJlciBvZiBsYWdzCiMnCiMnIEBwYXJhbSB5IC0gcmVzcG9uc2UgdmVjdG9yCiMnIEBwYXJhbSB4IC0gcHJlZGljdG9yIHZhcmlhYmxlcwojJyBAcGFyYW0gb3JpZyAtIGZvcmVjYXN0IG9yaWdpbgojJyBAcGFyYW0gZW5kIC0gZW5kaW5nIG9mIHZhbGlkYXRpb24gc2V0CiMnIEBwYXJhbSB0YXUgLSBWYVIgaW4gcXVlc3Rpb24KIycgQHBhcmFtIGxvd19tIC0gbG93IHZhbHVlIG9mIG0gdG8gY29uc2lkZXIKIycgQHBhcmFtIGhpZ2hfbSAtIGhpZ2ggdmFsdWUgb2YgbSB0byBjb25zaWRlcgojJwojJyBAcmV0dXJuIC0gcmV0dXJucyB0aGUgb3B0aW1hbCB2YWx1ZSBvZiBtCiMnIEBleHBvcnQKIycKIycgQGV4YW1wbGVzIC0gb3B0X21wKHkgPSBwY19kZlssMV0sIHggPSBwY19kZlssLTFdLCBvcmlnID0gNzU3LCBlbmQgPSAxMDA3LCB0YXUgPSAwLjAxLCBsb3dfbSA9MSwgaGlnaF9tICA9IDUsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsIGFyX3RmID0gMiwgbW9kX2RpID0gMSkKb3B0X21wID0gZnVuY3Rpb24oeSwgeCwgb3JpZywgZW5kID0gTlVMTCwgdGF1LCBsb3dfbSA9IDEsIGhpZ2hfbSwgbG93X3AgPSAxLCBoaWdoX3AsIG1vZF9kaSA9IDAsIGFyX3RmID0gMSwgcHJpbnRfbWRsID0gMCwgbW9kZWwgPSAxLCBwcmludF9tcCA9IDAsIHJvd25hbWUgPSBOVUxMKXsKICAjIEluaXRpYWxpemUgYSBsb3NzIG1hdHJpeAogIGxvc3NfbWF0ID0gbWF0cml4KDAsIGhpZ2hfcC1sb3dfcCArIDEsaGlnaF9tLWxvd19tICsgMSkKICAjIEluaXRpYWxpemUgYSBwIHZlY3RvcgogIHBfdmVjID0gc2VxKGxvd19wLCBoaWdoX3AsIGJ5ID0gMSkKICAjIExvb3AgdGhyb3VnaCBhbmQgcG9wdWxhdGUgdGhlIGxvc3MgdmVjdG9yCiAgZm9yIChpIGluIDE6bnJvdyhsb3NzX21hdCkpewogICAgbG9zc19tYXRbaSxdID0gb3B0X20oeSA9IHksIHggPSB4LCBvcmlnID0gb3JpZywgZW5kID0gZW5kLCB0YXUgPSB0YXUsIGxvd19tID0gbG93X20sIGhpZ2hfbSAgPSBoaWdoX20sIHAgPSBpLCBtb2RfZGkgPSBtb2RfZGksIGFyX3RmID0gYXJfdGYsIHByaW50X21kbCA9IHByaW50X21kbCwgbW9kZWwgPSBtb2RlbClbWzJdXQogIH0KICAjIEZpbmQgdGhlIG1pbmltaXplcgogIG9wdF9wID0gd2hpY2gobG9zc19tYXQgPT0gbWluKGxvc3NfbWF0KSwgYXJyLmluZCA9IFRSVUUpWzEsMV0KICBvcHRfbSA9IHdoaWNoKGxvc3NfbWF0ID09IG1pbihsb3NzX21hdCksIGFyci5pbmQgPSBUUlVFKVsxLDJdCiAgIyBQcmludCB0aGUgb3B0aW1hbCBwIGFuZCBvcHRpbWFsIG0KICBkZiA9IGFzLmRhdGEuZnJhbWUoY2JpbmQob3B0X20sIG9wdF9wKSkKICBuYW1lcyhkZikgPC0gYygiT3B0aW1hbCBtIiwgIk9wdGltYWwgcCIpCiAgIyBBc3NpZ24gYSByb3duYW1lCiAgaWYgKGlzLm51bGwocm93bmFtZSkgPT0gVFJVRSl7CiAgICBpZiAoYXJfdGYgPT0gMSl7CiAgICAgICMgV3JpdGUgdGhlIHJvdyBuYW1lcwogICAgICByb3duYW1lcyhkZikgPC0gYygiTVYgQ0FWaWFSICsgQVIiKQogICAgfSBlbHNlIGlmIChhcl90ZiA9PSAyKXsKICAgICAgIyBXcml0ZSB0aGUgcm93IG5hbWVzCiAgICAgIHJvd25hbWVzKGRmKSA8LSBjKCJNViBDQVZpYVIgKyBTQVYiKQogICAgfSBlbHNlIGlmIChhcl90ZiA9PSAzKXsKICAgICAgIyBXcml0ZSB0aGUgcm93IG5hbWVzCiAgICAgIHJvd25hbWVzKGRmKSA8LSBjKCJNViBDQVZpYVIgKyBBUyIpCiAgICB9IGVsc2UgewogICAgICByb3duYW1lcyhkZikgPC0gYygiVW5rbm93biBNb2RlbCIpCiAgICB9CiAgfQogIGVsc2UgewogICAgcm93bmFtZXMoZGYpIDwtIHJvd25hbWUKICB9CiAgIyBQcmludCB0aGUgZGYgaWYgdGhlIG9wdGlvbiBpcyB0dXJuZWQgb24KICBpZiAocHJpbnRfbXAgPT0gMSl7CiAgICBwcmludChkZikKICB9CiAgIyBSZXR1cm4gdGhlIGxvc3NfdmVjdG9yIGFuZCB0aGUgbWluaW16ZXIKICByZXR1cm4obGlzdChvcHRfbSwgb3B0X3AsIGxvc3NfbWF0LCBkZikpCn0KYGBgCgoKYGBge3J9CiMnIEEgZnVuY3Rpb24gdGhhdCBjb21iaW5lcyBvcHRpbWFsIHZhbHVlcyBvZiBtIGFuZCBwIGludG8gYSBmaW5hbCB0YWJsZQojJwojJyBAcGFyYW0gbTEgLSB0aGUgZGF0YSBmcmFtZSBmcm9tIHRoZSAiTVYgQ0FWaWFSIiBydW4KIycgQHBhcmFtIG0yIC0gdGhlIGRhdGEgZnJhbWUgZnJvbSB0aGUgIk1WIENBVmlhUiArIEFSIiBydW4KIycgQHBhcmFtIG0zIC0gdGhlIGRhdGEgZnJhbWUgZnJvbSB0aGUgIk1WIENBVmlhUiArIFNBViIgcnVuCiMnIEBwYXJhbSBtNCAtIHRoZSBkYXRhIGZyYW1lIGZyb20gdGhlICJNViBDQVZpYVIgKyBBUyIgcnVuCiMnCiMnIEByZXR1cm4gLSBhIG5pY2VseSBmb3JtYXR0ZWQgdGFibGUKIycgQGV4cG9ydAojJwojJyBAZXhhbXBsZXMgLSBwcmV0dHlfcG0ob3B0X3ByZWRfbmxbWzNdXSwgb3B0X3BtX20xW1s0XV0sIG9wdF9wbV9tMltbNF1dLCBvcHRfcG1fbTNbWzRdXSkKcHJldHR5X3BtID0gZnVuY3Rpb24obTEsIG0yLCBtMywgbTQpewogICMgTWVyZ2UgdGhlIGluZGl2aWR1YWwgZGF0YSBmcmFtZXMKICBwbV9wcmV0dHlfZGYgPSByYmluZChtMSwgbTIsIG0zLCBtNCkKICAjIEZvcm1hdCBuaWNlbHkKICBwbV9wcmV0dHlfZGYgJT4lIGthYmxlKGNhcHRpb24gPSAiT3B0aW1hbCBOdW1iZXIgb2YgRGlmZnVzaW9uIEluZGljZXMgKG0pIGFuZCBMYWdzIChwKSBmb3IgRGlmZmVyZW50IE1vZGVscyIsIGRpZ2l0cyA9IDApICU+JSBrYWJsZV9zdHlsaW5nKCJzdHJpcGVkIiwgZnVsbF93aWR0aCA9IEYpICU+JSBrYWJsZV9zdHlsaW5nKCkgJT4lIGZvb3Rub3RlKGdlbmVyYWwgPSAiVGhlIE1WIENBVmlhUiBtb2RlbCBkb2Vzbid0IGhhdmUgYW4gb3B0aW1hbCB2YWx1ZSBmb3IgcCBiZWNhdXNlIHRoZXJlIGFyZSBubyBBUiBsYWdzIGluIHRoZSBtb2RlbCIKICApCiAgCn0KCmBgYAoKCiMjIE1WIENhdmlhciAtIFJ1bm5pbmcgdGhlIHVuaXZhcmlhdGUgbW9kZWwgbXVsdGlwbGUgdGltZXMKCmBgYHtyfQojJyBIZXJlIGlzIGEgZnVuY3Rpb24gdGhhdCBydW5zIHRoZSB1bml2YXJpYXRlIENBVmlhUiBtb2RlbCA0IHRpbWVzCiMnCiMnIEBwYXJhbSBkZiAtIHRoZSBwZXJjZW50IGNoYW5nZSBkYXRhIGZyYW1lIHRvIGNvbnNpZGVyCiMnIEBwYXJhbSBuZmNzdCAtIG51bWJlciBvZiBmb3JlY2FzdHMgdG8gcnVuCiMnIEBwYXJhbSB0YXUgLSB0aGUgVmFSIGxldmVsIHRvIGNvbnNpZGVyCiMnIEBwYXJhbSBub19ydW4gLSBzcGVjaWZpZXMgaWYgYW55IG1vZGVscyBzaG91bGQgbm90IGJlIHJ1bgojJwojJyBAcmV0dXJuIC0gYSBsaXN0IG9mIHRoZSA0IHVuaXZhcmlhdGUgbW9kZWwgZm9yZWNhc3RzCiMnIEBleHBvcnQKIycKIycgQGV4YW1wbGVzIC0gYWNlZyA9IGdlbl91dl90ZXN0KHBjX2RmLCAxLCAwLjA1LCBub19ydW4gPSBjKDEsMSwwLDEpKQpnZW5fdXZfdGVzdCA9IGZ1bmN0aW9uKGRmLCBuZmNzdCwgdGF1LCBub19ydW4gPSBjKDAsMCwwLDApKXsKICAjIG1vZGVsIHR5cGUgKDEgLSBTQVYsIDIgLSBBUywgMyAtIEdBUkNILCA0IC0gQURBUFRJVkUpIAogICMgSW5pdGlhbGl6ZSBhIGxpc3QgIAogIG91dF9saXN0ID0gbGlzdCgpCiAgIyBSdW4gdGhlIGZvdXIgbW9kZWxzIC0gbW9kZWwgMTsgU0FWCiAgaWYgKG5vX3J1blsxXSA9PSAwKXsKICAgIHV2Y2F2XzEgPSByb2xsaW5nX3ByZWRpY3Rpb25zKGRmWywxXSwgcmFuZ2VfZGF0YSA9ICgxOmxlbmd0aChkZlssMV0pKSwgbmZjc3QgPSBuZmNzdCwgbW9kZWwgPSAxLCBHID0gMTAsIGNvbCA9IDEsIGxldmVsID0gdGF1KQogIH0KICAjIEFkZCBhIGZpbGxlciBpZiB0aGVyZSdzIG5vIGVudHJ5CiAgZWxzZSB7CiAgICB1dmNhdl8xID0gMAogIH0KICAjIE1vZGVsIDIgLSBBUwogIGlmIChub19ydW5bMl0gPT0gMCl7CiAgICB1dmNhdl8yID0gcm9sbGluZ19wcmVkaWN0aW9ucyhkZlssMV0sIHJhbmdlX2RhdGEgPSAoMTpsZW5ndGgoZGZbLDFdKSksIG5mY3N0ID0gbmZjc3QsIG1vZGVsID0gMiwgRyA9IDEwLCBjb2wgPSAxLCBsZXZlbCA9IHRhdSkKICB9CiAgZWxzZSB7CiAgICB1dmNhdl8yID0gMAogIH0KICAjIE1vZGVsIDMgLSBHQVJDSAogIGlmIChub19ydW5bM10gPT0gMCl7CiAgICB1dmNhdl8zID0gcm9sbGluZ19wcmVkaWN0aW9ucyhkZlssMV0sIHJhbmdlX2RhdGEgPSAoMTpsZW5ndGgoZGZbLDFdKSksIG5mY3N0ID0gbmZjc3QsIG1vZGVsID0gMywgRyA9IDEwLCBjb2wgPSAxLCBsZXZlbCA9IHRhdSkKICB9CiAgZWxzZSB7CiAgICB1dmNhdl8zID0gMAogIH0KICAjIE1vZGVsIDQgLSBBZGFwdGl2ZQogIGlmIChub19ydW5bNF0gPT0gMCl7CiAgICB1dmNhdl80ID0gcm9sbGluZ19wcmVkaWN0aW9ucyhkZlssMV0sIHJhbmdlX2RhdGEgPSAoMTpsZW5ndGgoZGZbLDFdKSksIG5mY3N0ID0gbmZjc3QsIG1vZGVsID0gNCwgRyA9IDEwLCBjb2wgPSAxLCBsZXZlbCA9IHRhdSkKICB9CiAgZWxzZSB7CiAgICB1dmNhdl80ID0gMAogIH0KICAjIEV4cG9ydCB0aGUgZGF0YSBhcyBhIGxpc3QKICByZXR1cm4obGlzdCh1dmNhdl8xLCB1dmNhdl8yLCB1dmNhdl8zLCB1dmNhdl80KSkKfQoKYGBgCgoKCiMjIE1WIENhdmlhciAtIFBsb3R0aW5nIGZ1bmN0aW9uCgpgYGB7cn0KIycgRnVuY3Rpb24gdG8gcGxvdCB0aGUgZGF0YSB3aGljaCB3ZSBnZW5lcmF0ZSBpbiBwcmV2aW91cyBmdW5jdGlvbnMKIycKIycgQHBhcmFtIHBsb3RfbWF0cml4IC0gbWF0cml4IHdpdGggdGhlIGRhdGEgdG8gcGxvdAojJyBAcGFyYW0gbm9ybV92YWx1ZSAtIHdoYXQgdG8gc3VidGFjdCBmcm9tIHRoZSBkYXRhIHRvIG1ha2UgaXQgb24gYSBwZXJjZW50YWdlIGNoYW5nZSBiYXNpcy4gRGVmYXVsdCBpcyAxMDAuCiMnCiMnIEByZXR1cm4gCiMnIEBleHBvcnQgLSBhIHBsb3Qgb2YgdGhlIGRhdGEgYnkgZGlmZnVzaW9uIGluZGV4IG51bWJlcgojJwojJyBAZXhhbXBsZXMgPSBwbHRfZGF0YShwbG90X210eFtbMV1dKSwgYWJjID0gcGx0X2RhdGEocGxvdF9tYXQsIHRhdSA9IDAuMDEpCnBsdF9kYXRhID0gZnVuY3Rpb24ocGxvdF9tYXRyaXgsIHRhdSwgcmVzcF92YXIsIG50ZXN0KXsKICAjIEVzdGFibGlzaCBhIG1heGltdW0gYW5kIG1pbmltdW0gdmFsdWUKICBtYXhfdmFsID0gbWF4KHBsb3RfbWF0cml4WywxOm5jb2wocGxvdF9tYXRyaXgpXSkKICBtaW5fdmFsID0gbWluKHBsb3RfbWF0cml4WywxOm5jb2wocGxvdF9tYXRyaXgpXSkKICAjIENhbGN1bGF0ZSBpbml0YWwgYW5kIGVuZGluZyB0aW1lIHZhbHVlCiAgc3RhcnQgPSBpbmRleChwbG90X21hdHJpeClbMV0KICBlbmQgPSBpbmRleChwbG90X21hdHJpeClbbnJvdyhwbG90X21hdHJpeCldCiAgaW5kX3ZhbHMgPSBpbmRleChwbG90X21hdHJpeCkgLSBzdGFydAogICMgQ3JlYXRlIGFuIGluaXRpYWwgcGxvdCBhbmQgYWRkIGxpbmVzCiAgICBmb3IgKGkgaW4gMTpuY29sKHBsb3RfbWF0cml4KSl7CiAgICAgIGlmIChpID09IDEpewogICAgICAgICMgNC8yLzIwMjAgLSBmaXhpbmcgdGhlIGluZGV4CiAgICAgICAgcGxvdC50cyhpbmRfdmFscyxwbG90X21hdHJpeFssaV0sIHR5cGUgPSAibCIsIHhsYWIgPSBwYXN0ZSgiRGF5cyBTaW5jZSIsIGFzLkRhdGUoc3RhcnQpKSwgeWxhYiA9ICJQZXJjZW50IENoYW5nZSBpbiBQRyIsIHlsaW0gPSBjKG1pbl92YWwsbWF4X3ZhbCksIGx3ZCA9IDEsIG1haW4gPSBwYXN0ZSgiUHJlZGljdGluZyIsIHJlc3BfdmFyLCAiUmV0dXJucyBmcm9tIiwgYXMuRGF0ZShzdGFydCksICJ0byIsIGFzLkRhdGUoZW5kKSksIHN1YiA9IHBhc3RlKCJUaGUgVmFSIExldmVsIGlzICIsIDEwMCp0YXUsICIlIiwgIjsgVGhlcmUgYXJlICIsIG50ZXN0LCAiIFRyYWRpbmcgRGF5cyBQbG90dGVkIEFib3ZlIiwgc2VwID0gIiIpKQogICAgICAgICMgcGxvdC50cyhpbmRleChwbG90X21hdHJpeCksIHBsb3RfbWF0cml4WyxpXSwgdHlwZSA9ICJsIiwgeGxhYiA9ICJUcmFkaW5nIERheXMiLCB5bGFiID0gIlBlcmNlbnQgQ2hhbmdlIGluIFBHIiwgeWxpbSA9IGMobWluX3ZhbCxtYXhfdmFsKSwgbHdkID0gMSwgbWFpbiA9ICJQcmVkaWN0aW5nIFBHIFJldHVybnMgT3ZlciBMYXN0IDI1MCBUcmFkaW5nIERheXMgaW4gMjAwOCIsIHN1YiA9IHBhc3RlKCJUaGUgVmFSIExldmVsIGlzICIsIDEwMCp0YXUsICIlIiwgc2VwID0gIiIpKQogICAgfSBlbHNlIGlmKGkgJWluJSBzZXEoMiw4LDEpKSB7CiAgICAgICAgbGluZXMoaW5kX3ZhbHMscGxvdF9tYXRyaXhbLGldLCBjb2wgPSBpLTEsIGx0eSA9IDIpCiAgICB9IGVsc2UgewogICAgICAgIGxpbmVzKGluZF92YWxzLHBsb3RfbWF0cml4WyxpXSwgY29sID0gaS0xLCBsdHkgPSAyLCBsd2QgPSAyKQogICAgfQogICAgfQogICMgRGVmaW5lIGEgc2VxdWVuY2UgZm9yIHBsb3R0aW5nCiAgcGxvdF9zZXEgPSBzZXEoMSwgbmNvbChwbG90X21hdHJpeCkpCiAgbGVnZW5kKCJ0b3BsZWZ0IiwgbGVnZW5kID0gYyhjb2xuYW1lcyhwbG90X21hdHJpeCkpLCBjb2wgPSBwbG90X3NlcSwgbHR5ID0gYygxLCByZXAoMiwgNyksIHJlcCgzLCBpZmVsc2UobmNvbChwbG90X21hdHJpeCktOCA8PSAwLCAwLCBuY29sKHBsb3RfbWF0cml4KS04KSkpLCBsd2QgPSBjKDEsIHJlcCgxLCA3KSwgcmVwKDIsIGlmZWxzZShuY29sKHBsb3RfbWF0cml4KS04IDw9IDAsIDAsIG5jb2wocGxvdF9tYXRyaXgpLTgpKSkpCiAgIyBBZGQgYSBsaW5lIGZvciAwCiAgIyBhYmxpbmUoaCA9IDAsIGNvbCA9ICJibGFjayIsIGx0eSA9IDIpCn0KCgpgYGAKCiMjIE1WIENhdmlhciAtIE9sZCBMb3NzIFRlc3QgRnVuY3Rpb24KCmBgYHtyfQojJyBBIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBsb3NzZXMgYmFzZWQgb24gdGhlIHRlc3Qgc2FtcGxlCiMnCiMnIEBwYXJhbSB0cnVlX3ZlYyAtIHRoZSB0cnVlIHZlY3RvciBvZiByZXR1cm5zCiMnIEBwYXJhbSBwcmVkX3ZlYyAtIHRoZSBwcmVkaWN0ZWQgdmVjdG9yIGZyb20gdGhlIG1vZGVsIHJ1bnMKIycgQHBhcmFtIHRhdSAtIFZhUiBsZXZlbC4gTXVzdCBtYXRjaCB3aGF0IHRoZSBtb2RlbCB1c2VkCiMnCiMnIEByZXR1cm4gLSB0b3RhbCBsb3NzZXMgYW5kIHRoZSBlbnRpcmUgbG9zcyB2ZWN0b3IKIycgQGV4cG9ydAojJwojJyBAZXhhbXBsZXMKbG9zc190ZXN0ID0gZnVuY3Rpb24odHJ1ZV92ZWMsIHByZWRfdmVjLCB0YXUpewogICMgSW5pdGlhbGl6ZSBhIGxvc3MgdmVjdG9yCiAgbHZlYyA9IHJlcCgwLCBsZW5ndGgodHJ1ZV92ZWMpKQogICMgSW5pdGlhbGl6ZSBhIGJyZWFrIHZlY3RvciB0byBzZWUgd2hlbiBWYVIgaXMgYnJva2VuCiAgYnZlYyA9IHJlcCgwLCBsZW5ndGgodHJ1ZV92ZWMpKQogIGZvciAoaSBpbiAxOmxlbmd0aCh0cnVlX3ZlYykpewogICAgIyBDYWxjdWxhdGUgYW4gaW5kaWNhdG9yIHZhcmlhYmxlCiAgICBidmVjW2ldID0gaWZlbHNlKHRydWVfdmVjW2ldIDwgcHJlZF92ZWNbaV0sIDEsMCkKICAgICMgVXNlIGluZGljYXRvciBpbiBmdW5jdGlvbiBiZWxvdwogICAgbHZlY1tpXSA9ICh0YXUgLSBidmVjW2ldKSoodHJ1ZV92ZWNbaV0gLSBwcmVkX3ZlY1tpXSkKICB9CiAgIyBBZGQgdXAgdGhlIGxvc3NlcwogICMgc3VtbG9zcyA9IHN1bShsdmVjKS9sZW5ndGgobHZlYykKICBzdW1sb3NzID0gc3VtKGx2ZWMpCiAgIyBBZGQgdXAgdGhlIFZhUiBicmVha2FnZQogIHZhcmJyZWFrID0gc3VtKGJ2ZWMpL2xlbmd0aChidmVjKQogIHJldHVybihsaXN0KHN1bWxvc3MsbHZlYywgdmFyYnJlYWssIGJ2ZWMpKQp9CmBgYAoKCgojIyBNViBDYXZpYXIgLSBBIGdlbmVyYWxpemVkIGxvc3MgY2FsY3VsYXRpb24gZnVuY3Rpb24KCmBgYHtyfQojJyBBIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBsb3NzZXMgYmFzZWQgb24gdGhlIHBsb3QgbWF0cml4CiMnCiMnIEBwYXJhbSBkYXRhX21hdCAtIGEgbWF0cml4IG9mIGZvcmVjYXN0ZWQgVmFSIHZhbHVlcywgd2l0aCB0aGUgdHJ1ZSB2YWx1ZSBpbiB0aGUgZmlyc3QgY29sdW1uCiMnIEBwYXJhbSB0YXUgLSBWYVIgbGV2ZWwuIE11c3QgbWF0Y2ggd2hhdCB0aGUgbW9kZWwgdXNlZAojJwojJyBAcmV0dXJuIC0gYSBsaXN0IG9mIGZvdXIgaXRlbXMuIAojJyAxID0gYSB2ZWN0b3Igb2YgdGhlIGxvc3NlcyBvZiBhbGwgbW9kZWxzLiAKIycgMiA9IGEgdmVjdG9yIHNob3dpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgVmFSIGJyZWFrcyBieSBtb2RlbAojJyAzID0gdGhlIGxvc3MgbWF0cml4CiMnIDQgPSB0aGUgYnJlYWsgbWF0cml4CiMnIEBleHBvcnQKIycKIycgQGV4YW1wbGVzCmdlbl9sb3NzX3Rlc3QgPSBmdW5jdGlvbihkYXRhX21hdCwgdGF1KXsKICAjIEluaXRpYWxpemUgbG9zcyBhbmQgYnJlYWsgbWF0cmljZXMKICBsbWF0ID0gYm1hdCA9IG1hdHJpeCgwLCBucm93ID0gbnJvdyhkYXRhX21hdCksIG5jb2wgPSBuY29sKGRhdGFfbWF0KS0xKQogICMgYnZlYyA9IHJlcCgwLCBsZW5ndGgodHJ1ZV92ZWMpKQogICMgUG9wdWxhdGUgdGhlIG1hdHJpY2VzCiAgZm9yIChpIGluIDE6bnJvdyhsbWF0KSl7CiAgICBmb3IgKGogaW4gMToobmNvbChsbWF0KSkpewogICAgICAjIENhbGN1bGF0ZSBhbiBpbmRpY2F0b3IgdmFyaWFibGUKICAgICAgYm1hdFtpLGpdID0gaWZlbHNlKGRhdGFfbWF0W2ksMV0gPCBkYXRhX21hdFtpLGorMV0sIDEsMCkKICAgICAgIyBVc2UgaW5kaWNhdG9yIGluIGZ1bmN0aW9uIGJlbG93CiAgICAgIGxtYXRbaSxqXSA9ICh0YXUgLSBibWF0W2ksal0pKihkYXRhX21hdFtpLDFdIC0gZGF0YV9tYXRbaSxqKzFdKQogICAgfSAgICAKICB9CiAgIyBBZGQgdXAgdGhlIGxvc3NlcwogIHN1bWxvc3MgPSBjb2xTdW1zKGxtYXQpCiAgIyBBZGQgdXAgdGhlIFZhUiBicmVha2FnZQogIHZhcmJyZWFrID0gY29sU3VtcyhibWF0KS9ucm93KGJtYXQpCiAgcmV0dXJuKGxpc3Qoc3VtbG9zcywgdmFyYnJlYWssIGxtYXQsIGJtYXQpKQp9CmBgYAoKCiMjIE1WIENhdmlhciAtIFRhYmxlcyBmdW5jdGlvbgoKYGBge3J9CiMnIEEgZnVuY3Rpb24gdG8gbWFrZSBhIG5pY2UgY29tcGFyaXNvbiBvZiBsb3NzZXMKIycKIycgQHBhcmFtIGRhdGFfbWF0IC0gaW5wdXQgZGF0YSBtYXRyaXggdXNlZCBpbiB0aGUgY2FsY3VsYXRpb24gb2YgbG9zc2VzCiMnIEBwYXJhbSBsb3NzX2xpc3QgLSBhIGxpc3Qgb2YgdGhlIGxvc3NlcyBjYWxjdWxhdGVkIGZyb20gdGhlIENBVmlhUiBmdW5jdGlvbgojJyBAcGFyYW0gdGF1IC0gdGhlIHJpc2sgbGV2ZWwgdXNlZAojJyBAcGFyYW0gbnRlc3QgLSB0aGUgbnVtYmVyIG9mIHRlc3QgcG9pbnRzCiMnCiMnIEByZXR1cm4KIycgQGV4cG9ydCAtIHJldHVybnMgYSBuaWNlbHkgZm9ybWF0dGVkIHRhYmxlCiMnCiMnIEBleGFtcGxlcyAtIHByZXR0eV90YWJsZXMocGxvdF9tYXQsIGxfbGlzdCwgdGF1ID0gMC4wMSkKcHJldHR5X3RhYmxlcyA9IGZ1bmN0aW9uKGRhdGFfbWF0LCBsb3NzX2xpc3QsIHRhdSwgbnRlc3QpewogICMgQ29tYmluZSBpbnRvIGEgZGF0YSBmcmFtZQogIGRmID0gYXMuZGF0YS5mcmFtZShyYmluZChsb3NzX2xpc3RbWzFdXSwgbG9zc19saXN0W1syXV0pKQogICMgQ2FsY3VsYXRlIGluaXRhbCBhbmQgZW5kaW5nIHRpbWUgdmFsdWUKICBzdGFydCA9IGluZGV4KGRhdGFfbWF0KVsxXQogIGVuZCA9IGluZGV4KGRhdGFfbWF0KVtucm93KGRhdGFfbWF0KV0KICAjIEFkZCByb3cvY29sdW1uIG5hbWVzCiAgY29sbmFtZXMoZGYpIDwtIGNvbG5hbWVzKGRhdGFfbWF0WywtMV0pCiAgcm93bmFtZXMoZGYpIDwtIGMoIkxvc3NlcyIsICJWYVIgQnJlYWtzICglKSIpCiAgIyBDb252ZXJ0IHRvIGEgdGFibGUKICBkZiAlPiUga2FibGUoY2FwdGlvbiA9IHBhc3RlKCJDb21wYXJpc29uIG9mIFZhUiBNZXRob2RzIGZvciBhICIsIHRhdSoxMDAsICIlIFZhUiIsIHNlcCA9ICIiKSwgZGlnaXRzID0gMykgJT4lIGthYmxlX3N0eWxpbmcoInN0cmlwZWQiLCBmdWxsX3dpZHRoID0gRikgJT4lIGthYmxlX3N0eWxpbmcoKSAlPiUgZm9vdG5vdGUoZ2VuZXJhbCA9IHBhc3RlKCJDYWxjdWxhdGVkIHVzaW5nIiwgbnRlc3QsICJ0cmFkaW5nIGRheXMgZnJvbSIsIGFzLkRhdGUoc3RhcnQpLCAidG8iLCBhcy5EYXRlKGVuZCkpKQp9CmBgYAoKCgoKIyMgRXhwb3J0IGZ1bmN0aW9uCgoKCgpgYGB7cn0KIycgQSBkcmVzc2VkIHVwIHZlcnNpb24gb2YgdGhlIGV4cG9ydCBmdW5jdGlvbgojJwojJyBAcGFyYW0gdmFyX2ZpbGUgLSBmaWxlIHRvIGV4cG9ydAojJyBAcGFyYW0gcGF0aCAtIGZpbGVwYXRoCiMnIEBwYXJhbSBmaWxlbmFtZSAtIG5hbWUgb2YgdGhlIGZpbGUsIGVuZGluZyB3aXRoIC5DU1YKIycKIycgQHJldHVybgojJyBAZXhwb3J0IC0gZXhwb3J0ZWQgQ1NWIGZpbGUKIycKIycgQGV4YW1wbGVzIC0gZXhwX2Z1bmModmFyX2ZpbGUgPSB2YXJfMXBjXzIwMTZfdXNldGZbWzFdXSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX1VTX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gIlRFU1QuY3N2IikKZXhwX2Z1bmMgPSBmdW5jdGlvbih2YXJfZmlsZSwgcGF0aCwgZmlsZW5hbWUpewogICMgV3JpdGUgYSB6b28KICB3cml0ZS56b28odmFyX2ZpbGUsIHBhc3RlMChwYXRoLCBmaWxlbmFtZSksIHF1b3RlID0gRkFMU0UsIHNlcCA9ICIsIikKfQoKIyBleHBfZnVuYyh2YXJfZmlsZSA9IHZhcl8xcGNfMjAxNl91c2V0ZltbMV1dLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAiVEVTVC5jc3YiKQoKYGBgCgoKCgojIEJpZyBTaW11bGF0aW9uIEZ1bmN0aW9uCgpgYGB7cn0KIycgVGhpcyBpcyB0aGUgIm1hc3RlciIgZnVuY3Rpb24gd2hlcmUgd2UnbGwgZXZhbHVhdGUgdGhlIGltcG9ydGFuY2Ugb2YgdGhlIFZhUiBtb2RlbCBvdmVyIHNldmVyYWwgdGltZSBwZXJpb2RzCiMnCiMnIEBwYXJhbSBzeW1ib2xfbGlzdCAtIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGZlZWQgaW50byB0aGUgbW9kZWwgCiMnIEBwYXJhbSByZXNwX3ZhciAtIHRoZSByZXNwb25zZSB2YXJpYWJsZQojJyBAcGFyYW0gY29tcGxfY2FzZSAtIHNob3VsZCB0aGUgbW9kZWwgcmVxdWlyZSBjb21wbGV0ZSBjYXNlcz8gRGVmYXVsdCB2YWx1ZSBpcyAxLgojJyBAcGFyYW0gYWRqX2Nsb3NlIC0gdXNlIGFkanVzdGVkIGNsb3NlIHByaWNlIGZvciB0aGUgcHJlZGljdG9ycz8gRGVmYXVsdCB2YWx1ZSBpcyAxLgojJyBAcGFyYW0gcmVzcF9hZGpfY2xvc2UgLSB1c2UgYWRqdXN0ZWQgY2xvc2UgcHJpY2UgZm9yIHRoZSByZXNwb25zZT8gRGVmYXVsdCB2YWx1ZSBpcyAxLgojJyBAcGFyYW0gc3RhcnRfZGF0ZSAtIHN0YXJ0IGRhdGUgdG8gcHVsbCBkYXRhIGZyb20KIycgQHBhcmFtIGVuZF9kYXRlIC0gZW5kIGRhdGUgdG8gcHVsbCBkYXRhIGZyb20KIycgQHBhcmFtIG52YWwgLSBudW1iZXIgb2YgdmFsaWRhdGlvbiBwb2ludHMgdG8gdXNlCiMnIEBwYXJhbSBudGVzdCAtIG51bWJlciBvZiB0ZXN0IHBvaW50cyB0byB1c2UKIycgQHBhcmFtIHRhdSAtIFZhUiBsZXZlbCB0byB1c2UKIycgQHBhcmFtIGxvd19tIC0gbG93IG51bWJlciBvZiBwcmVkaWN0b3JzIHRvIHRlc3QKIycgQHBhcmFtIGhpZ2hfbSAgLSBsb3cgbnVtYmVyIG9mIHByZWRpY3RvcnMgdG8gdGVzdAojJyBAcGFyYW0gdXZfbGlzdCAtIGEgbGlzdCBvZiBhIHByZS1ydW4gdW5pdmFyaWF0ZSBtb2RlbC4gSWYgYSBkYXRhIGZyYW1lIGlzIG5vdCBwcm92aWRlZCwgdGhlIGxlbmd0aHkgdXYgbW9kZWwgd2lsbCBydW4gCiMnIEBwYXJhbSBub19ydW4gLSB0aGluZ3Mgbm90IHRvIHJ1biBpbiB0aGUgbW9kZWwKIycgQHBhcmFtIGxvd19wIC0gbG93IHZhbHVlIGZvciBudW1iZXIgb2YgbGFncwojJyBAcGFyYW0gaGlnaF9wIC0gaGlnaCB2YWx1ZSBmb3IgbnVtYmVyIG9mIGxhZ3MKIycgQHBhcmFtIG5hX2ludGVycCAtIHNob3VsZCB0aGUgZnVuY3Rpb24gaW50ZXJwb2xhdGUgTkEncwojJyBAcGFyYW0gcHJpbnRfbWRsIC0gcHJpbnQgdGhlIG1vZGVsIHN1bW1hcmllcz8KIycgQHBhcmFtIHByaW50X21wIC0gcHJpbnQgdGhlIG9wdGltYWwgdmFsdWVzIGZvciBwIGFuZCBtCiMnIEBwYXJhbSBsYWdfcHJlZCAtIGRvIHlvdSB3YW50IHRvIGxhZyB0aGUgbSBwcmVkaWN0b3JzIChkZWZhdWx0IGlzIDE7IHN0cm9uZ2x5IHJlY29tbWVuZGVkKQojJyBAcGFyYW0gcm93bmFtZSAtIHdoYXQgdG8gbmFtZSB0aGUgcm93cyBvZiB0aGUgbmljZSBwIGFuZCBtIG1hdHJpeAojJyBAcGFyYW0gZXhwb3J0X2NzdiAtIGRvIHlvdSB3YW50IHRvIGV4cG9ydCBhIENTVj8gRGVmYXVsdCBpcyAxLgojJyBAcGFyYW0gcGF0aCAtIHBhdGggdG8gZXhwb3J0IHRoZSBDU1YKIycgQHBhcmFtIGZpbGVuYW1lIC0gd2hhdCB0byBuYW1lIHRoZSBDU1YKIycKIycgQHJldHVybiAtIGEgbGlzdCBvZiB0aGUgcGxvdCBtYXRyaXgsIGEgcGxvdCwgYSBsaXN0IHdpdGggbG9zc2VzLCBhbmQgYSB0YWJsZQojJyBAZXhwb3J0IC0gYSBwbG90IGFuZCBhIHRhYmxlCiMnCiMnIEBleGFtcGxlcyAtIGNhdl9zaW11bChjKCJESVMiLCAiR0UiLCAiSUJNIiwgIk1NTSIsICJYT00iKSwgcmVzcF92YXIgPSAiUEciLCBzdGFydF9kYXRlID0gIjIwMDQtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDA4LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gNSwgdGF1ID0gMC4wMSwgdXZfbGlzdCA9IHV2X2Nhdl9saXN0KQpjYXZfc2ltdWwgPSBmdW5jdGlvbihzeW1ib2xfbGlzdCwgcmVzcF92YXIsIGNvbXBsX2Nhc2UgPSAxLCBhZGpfY2xvc2UgPSAxLCByZXNwX2Fkal9jbG9zZSA9IDEsIHN0YXJ0X2RhdGUgPSAiMTkwMC0wMS0wMSIsIGVuZF9kYXRlID0gU3lzLkRhdGUoKSwgbnZhbCwgbnRlc3QsIHRhdSwgbG93X20gPSAxLCBoaWdoX20sIGxvd19wID0gMSwgaGlnaF9wLCB1dl9saXN0ID0gTlVMTCwgbm9fcnVuID0gYygwLDAsMCwwKSwgbmFfaW50ZXJwID0gVFJVRSwgcHJpbnRfbWRsID0gMCwgcHJpbnRfbXAgPSAwLCBsYWdfcHJlZCA9IDEsIHJvd25hbWUgPSBOVUxMLCBleHBvcnRfY3N2ID0gMSwgcGF0aCwgZmlsZW5hbWUpewogICMgU2VsZWN0IGRhdGEgcGFyYW1ldGVycywgcHVsbCB0aGUgZGF0YSwgYW5kIHBlcmNlbnQgY2hhbmdlIHRoZSBkYXRhCiAgZGYgPSBkaWZmX2luZGV4X2RmKHN5bWJvbF9saXN0ID0gc3ltYm9sX2xpc3QsIHJlc3BfdmFyID0gcmVzcF92YXIsIGNvbXBsX2Nhc2UgPSBjb21wbF9jYXNlLCBhZGpfY2xvc2UgPSBhZGpfY2xvc2UsIHJlc3BfYWRqX2Nsb3NlID0gcmVzcF9hZGpfY2xvc2UsIHN0YXJ0X2RhdGUgPSBzdGFydF9kYXRlLCBlbmRfZGF0ZSA9IGVuZF9kYXRlLCBsYWdfcHJlZCA9IGxhZ19wcmVkKQogICMgVGFrZSB0aGUgcGVyY2VudCBjaGFuZ2Ugb2YgdGhlIGRhdGEKICBwY19kZiA9IHBjX2RpZmZfaW5kZXgoZGYpCiAgIyBFeHRyYWN0IHRoZSBsZWdudGggb2YgdGhlIGRhdGEgZnJhbWUKICBuciA9IHRlc3RfZW5kID0gbnJvdyhwY19kZikKICAjIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIHZhbCBwZXJpb2QsIHRoZSBlbmQgb2YgdGhlIHZhbCBwZXJpb2QsIGFuZCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGVzdCBwZXJpb2QKICB0ZXN0X29yaWcgPSB0ZXN0X2VuZCAtIG50ZXN0CiAgdmFsX2VuZCA9IHRlc3Rfb3JpZwogIHZhbF9vcmlnID0gdGVzdF9vcmlnIC0gbnZhbAogICMgVGVzdCBmb3IgdGhlIG9wdGltYWwgbnVtYmVyIG9mIHBhcmFtZXRlcnMKICBvcHRfcHJlZF9ubCA9IG9wdF9tKHkgPSBwY19kZlssMV0sIHggPSBwY19kZlssLTFdLCBvcmlnID0gdmFsX29yaWcsIGVuZCA9IHZhbF9lbmQsIHRhdSA9IHRhdSwgbG93X20gPSBsb3dfbSwgaGlnaF9tID0gaGlnaF9tLCByb3duYW1lID0gcm93bmFtZSkKICBvcHRfcHJlZF9hcnQxID0gb3B0X21wKHkgPSBwY19kZlssMV0sIHggPSBwY19kZlssLTFdLCBvcmlnID0gdmFsX29yaWcsIGVuZCA9IHZhbF9lbmQsIHRhdSA9IHRhdSwgbG93X20gPSBsb3dfbSwgaGlnaF9tID0gaGlnaF9tLCBsb3dfcCA9IGxvd19wLCBoaWdoX3AgPSBoaWdoX3AsbW9kX2RpID0gMSwgYXJfdGYgPSAxLCBwcmludF9tZGwgPSBwcmludF9tZGwsIHByaW50X21wID0gcHJpbnRfbXAsIHJvd25hbWUgPSByb3duYW1lKQogIG9wdF9wcmVkX2FydDIgPSBvcHRfbXAoeSA9IHBjX2RmWywxXSwgeCA9IHBjX2RmWywtMV0sIG9yaWcgPSB2YWxfb3JpZywgZW5kID0gdmFsX2VuZCwgdGF1ID0gdGF1LCBsb3dfbSA9IGxvd19tLCBoaWdoX20gPSBoaWdoX20sIGxvd19wID0gbG93X3AsIGhpZ2hfcCA9IGhpZ2hfcCxtb2RfZGkgPSAxLCBhcl90ZiA9IDIsIHByaW50X21kbCA9IHByaW50X21kbCwgcHJpbnRfbXAgPSBwcmludF9tcCwgcm93bmFtZSA9IHJvd25hbWUpCiAgb3B0X3ByZWRfYXJ0MyA9IG9wdF9tcCh5ID0gcGNfZGZbLDFdLCB4ID0gcGNfZGZbLC0xXSwgb3JpZyA9IHZhbF9vcmlnLCBlbmQgPSB2YWxfZW5kLCB0YXUgPSB0YXUsIGxvd19tID0gbG93X20sIGhpZ2hfbSA9IGhpZ2hfbSwgbG93X3AgPSBsb3dfcCwgaGlnaF9wID0gaGlnaF9wLCBtb2RfZGkgPSAxLCBhcl90ZiA9IDMsIHByaW50X21kbCA9IHByaW50X21kbCwgcHJpbnRfbXAgPSBwcmludF9tcCwgcm93bmFtZSA9IHJvd25hbWUpCiAgIyBnZW5fdXZfdGVzdChwY19kZiwgMSwgMC4wNSwgbm9fcnVuID0gYygxLDEsMCwxKSkKICAjIFVzZSB0aGUgYWJvdmUgZm9yZWNhc3RzIHRvIGlucHV0IGludG8gdGhlIGFib3ZlCiAgbXZfZmNzdCA9IG1vZF9kaShwY19kZlssMV0sIHBjX2RmWywtMV0sIG9yaWcgPSB0ZXN0X29yaWcsIG0gPSBvcHRfcHJlZF9ubFtbMV1dLCB0YXUgPSB0YXUsIHByaW50X21kbCA9IHByaW50X21kbCkKICBtdl9mY3N0X2FydDEgPSBtb2RfZGlfd2wocGNfZGZbLDFdLCBwY19kZlssLTFdLCBvcmlnID0gdGVzdF9vcmlnLCBtID0gb3B0X3ByZWRfYXJ0MVtbMV1dLCBwID0gb3B0X3ByZWRfYXJ0MVtbMl1dLCB0YXUgPSB0YXUsIGFyX3RmID0gMSwgcHJpbnRfbWRsID0gcHJpbnRfbWRsKQogIG12X2Zjc3RfYXJ0MiA9IG1vZF9kaV93bChwY19kZlssMV0sIHBjX2RmWywtMV0sIG9yaWcgPSB0ZXN0X29yaWcsIG0gPSBvcHRfcHJlZF9hcnQyW1sxXV0sIHAgPSBvcHRfcHJlZF9hcnQyW1syXV0sIHRhdSA9IHRhdSwgYXJfdGYgPSAyLCBwcmludF9tZGwgPSBwcmludF9tZGwpCiAgbXZfZmNzdF9hcnQzID0gbW9kX2RpX3dsKHBjX2RmWywxXSwgcGNfZGZbLC0xXSwgb3JpZyA9IHRlc3Rfb3JpZywgbSA9IG9wdF9wcmVkX2FydDNbWzFdXSwgcCA9IG9wdF9wcmVkX2FydDNbWzJdXSwgdGF1ID0gdGF1LCBhcl90ZiA9IDMsIHByaW50X21kbCA9IHByaW50X21kbCkKICAjIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIHByZWRpY3Rpb25zCiAgaWYgKGlzLm51bGwodXZfbGlzdCkgPT0gVFJVRSl7CiAgICAjIFByaW50IGEgd2FybmluZwogICAgcHJpbnQoIldBUk5JTkc6IE5vdCBzdXBwbHlpbmcgYW4gaW5wdXQgZGF0YSBmcmFtZSB3aWxsIHJlcXVpcmUgdGhpcyBmdW5jdGlvbiB0byBydW4gZm9yIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHRpbWUgKDFocispIikKICAgICMgQ2FsbCB0aGUgZnVuY3Rpb24KICAgICMgZ2VuX3V2X3Rlc3QgPSBmdW5jdGlvbihkZiwgbmZjc3QsIHRhdSwgbm9fcnVuID0gYygwLDAsMCwwKSl7CiAgICAjIHByaW50KGhlYWQocGNfZGYpKQogICAgdXZfbGlzdCA9IGdlbl91dl90ZXN0KGRmID0gcGNfZGYsIG5mY3N0ID0gbnRlc3QsIHRhdSA9IHRhdSwgbm9fcnVuID0gbm9fcnVuKQogICAgIyBBZGQgdG8gYSBkYXRhIGZyYW1lCiAgICAjIEluY29ycG9yYXRlIHRoZSByb2xsaW5nIHByZWRpY3Rpb25zIGZ1bmN0aW9uIHJlc3VsdHMgaGVyZQogIHBsb3RfbWF0ID0gY2JpbmQocGNfZGZbKHRlc3Rfb3JpZysxKTpucm93KHBjX2RmKSwxXSwgbXZfZmNzdCR5aGF0WzE6bnRlc3RdLCBtdl9mY3N0X2FydDEkeWhhdFsxOm50ZXN0XSwgbXZfZmNzdF9hcnQyJHloYXRbMTpudGVzdF0sIG12X2Zjc3RfYXJ0MyR5aGF0WzE6bnRlc3RdLCB1dl9saXN0W1sxXV1bKHRlc3Rfb3JpZysxKTp0ZXN0X2VuZF0qKC0xKSwgdXZfbGlzdFtbMl1dWyh0ZXN0X29yaWcrMSk6dGVzdF9lbmRdKigtMSksIHV2X2xpc3RbWzNdXVsodGVzdF9vcmlnKzEpOnRlc3RfZW5kXSooLTEpLCB1dl9saXN0W1s0XV1bKHRlc3Rfb3JpZysxKTp0ZXN0X2VuZF0qKC0xKSkKICB9IGVsc2UgewogICAgIyBBc3NpZ24gdGhlIGNvbHVtbnMgb2YgdGhlIGRhdGEgZnJhbWUKICAgICMgaGVhZCh2YXJfNXBjXzIwMTBfdXNldGZbWzFdXVssNjo5XSkKICAgICMgbW9kZWwgdHlwZSAoMSAtIFNBViwgMiAtIEFTLCAzIC0gR0FSQ0gsIDQgLSBBREFQVElWRSkgCiAgICAjIHRlc3RfZGYgPSBoZWFkKHZhcl81cGNfMjAxMF91c2V0ZltbMV1dWyw2OjldKQogICAgIyB0ZXN0X2RmJFNBVgogICAgIyB0ZXN0X2RmJGBBYnMuIFNsb3BlYAogICAgIyB0ZXN0X2RmJGBJbmQuIEdBUkNIYAogICAgIyB0ZXN0X2RmJEFkYXB0aXZlCiAgICBwbG90X21hdCA9IGNiaW5kKHBjX2RmWyh0ZXN0X29yaWcrMSk6bnJvdyhwY19kZiksMV0sIG12X2Zjc3QkeWhhdFsxOm50ZXN0XSwgbXZfZmNzdF9hcnQxJHloYXRbMTpudGVzdF0sIG12X2Zjc3RfYXJ0MiR5aGF0WzE6bnRlc3RdLCBtdl9mY3N0X2FydDMkeWhhdFsxOm50ZXN0XSwgdXZfbGlzdCRTQVYsIHV2X2xpc3QkYEFicy4gU2xvcGVgLCB1dl9saXN0JGBJbmQuIEdBUkNIYCwgdXZfbGlzdCRBZGFwdGl2ZSkKICB9CiAgIyBDb3VudCB0aGUgTkFzIGFuZCBwcmludCBhIHdhcm5pbmcKICBwcmludChwYXN0ZSgiTk9URTogVGhlcmUgYXJlICIsIHN1bShpcy5uYShwbG90X21hdCkpLCAiIE5BKHMpIGluIHRoZSBkYXRhc2V0Iiwgc2VwID0gIiIpKQogICMgTGluZWFybHkgaW50ZXJwb2xhdGUgdGhlIE5BcwogIGlmIChuYV9pbnRlcnAgPT0gVFJVRSl7CiAgICAjIEFzc2lnbiB0aGUgcGxvdCBtYXRyaXggdG8gYSBuZXcgdmFsdWUKICAgIHBsb3RfbWF0X25hIDwtIHBsb3RfbWF0CiAgICAjIFByaW50IGEgd2FybmluZwogICAgcHJpbnQoIldBUk5JTkc6IFRoZXJlIHdlcmUgbWlzc2luZyB2YWx1ZXMgaW4gdGhlIHBsb3QgbWF0cml4LiIpCiAgICAjIEludGVycG9sYXRlIHRoZSBOQSdzCiAgICBmb3IgKGkgaW4gMTpuY29sKHBsb3RfbWF0X25hKSl7CiAgICAgICMgSW50ZXJwb2xhdGUgdGhlIGRhdGEKICAgICAgcGxvdF9tYXRbLGldIDwtIG5hLmFwcHJveChwbG90X21hdF9uYVssaV0pCiAgICB9CiAgfQogICMgbW9kZWwgdHlwZSAoMSAtIFNBViwgMiAtIEFTLCAzIC0gR0FSQ0gsIDQgLSBBREFQVElWRSkKICAjIEFkZCBkZXNjcmlwdGl2ZSB0aXRsZXMgb250byB0aGUgcGxvdF9tYXQKICBjb2xuYW1lcyhwbG90X21hdCkgPC0gYyhyZXNwX3ZhciwgIk1WIENBVmlhUiIsICJNViBDQVZpYVIgKyBBUiIsICJNViBDQVZpYVIgKyBTQVYiLCAiTVYgQ0FWaWFSICsgQVMiLCAiU0FWIiwgIkFicy4gU2xvcGUiLCAiSW5kLiBHQVJDSCIsICJBZGFwdGl2ZSIpCiAgIyBjb2xuYW1lcyhwbG90X21hdCkgPC0gYygiU1BZIiwgIk1WIENBVmlhUiIsICJNViBDQVZpYVIgKyBBUiIsICJNViBDQVZpYVIgKyBTQVYiLCAiTVYgQ0FWaWFSICsgQVMiLCAiU0FWIiwgIkFicy4gU2xvcGUiLCAiSW5kLiBHQVJDSCIsICJBZGFwdGl2ZSIpCiAgIyBQbG90IGV2ZXJ5dGhpbmcKICBwbG90ID0gcGx0X2RhdGEocGxvdF9tYXQsIHRhdSA9IHRhdSwgcmVzcF92YXIgPSByZXNwX3ZhciwgbnRlc3QgPSBudGVzdCkKICAjIENhbGN1bGF0ZSBsb3NzZXMKICBsX2xpc3QgPSBnZW5fbG9zc190ZXN0KHBsb3RfbWF0LCB0YXUgPSB0YXUpCiAgIyBQdXQgaW50byB0YWJsZXMKICB0YWJsZXMgPSBwcmV0dHlfdGFibGVzKHBsb3RfbWF0LCBsX2xpc3QsIHRhdSA9IHRhdSwgbnRlc3QgPSBudGVzdCkKICAjIFJ1biB0aGUgZnVuY3Rpb24gZm9yIG9wdGltYWwgcCBhbmQgbQogIHBtX3RhYmxlID0gcHJldHR5X3BtKG9wdF9wcmVkX25sW1szXV0sIG9wdF9wcmVkX2FydDFbWzRdXSwgb3B0X3ByZWRfYXJ0MltbNF1dLCBvcHRfcHJlZF9hcnQzW1s0XV0pCiAgIyBFeHBvcnQgdGhlIG1hdHJpeAogIGlmIChleHBvcnRfY3N2ID09IDEpewogICAgZXhwX2Z1bmModmFyX2ZpbGUgPSBwbG90X21hdCwgcGF0aCwgZmlsZW5hbWUpCiAgfQogICMgUHJpbnQgdGhlIHRhYmxlcyBhbmQgdGhlIHBsb3QKICBwcmludChwbG90KQogIHByaW50KHRhYmxlcykKICBwcmludChwbV90YWJsZSkKICByZXR1cm4obGlzdChwbG90X21hdCwgcGxvdCwgbF9saXN0LCB0YWJsZXMsIHBsb3RfbWF0X25hLCBwbV90YWJsZSkpCn0KYGBgCgoKCiMgU2VjdG9yIEVURnMgYXMgRXhwbGFuYXRvcnkgVmFyaWFibGVzCgpIZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuCgpMb3dlc3QgbGV2ZWw6IDElLCA1JSwgMTAlIFZhUgpOZXh0LCAyMDA4LCAyMDEwLCAyMDE0LCBvciAyMDE2CkhpZ2hlc3QgLSBFVEYgY2hvaWNlcwozIHggNCB4IDUgPSA2MCBydW5zCgpgYGB7cn0KIyBJbXBvcnQgdGhlIGRhdGEgZnJvbSBDU1YncwoKIyBhYmMgPSByZWFkLmNzdigiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9VU19FVEZfcnVucy92YXJfMXBjXzIwMDhfdXNldGYuY3N2Iiwgc2VwID0gIiwiLCBoZWFkZXIgPSBUKQojIGhlYWQoYWJjKQojIGFzLnh0cyhhYmMsIG9yZGVyLmJ5ID0gYWJjWywxXSkKCiMgdGVzdDEgPC0gcmVhZC56b28oIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvdmFyXzFwY18yMDA4X3VzZXRmLmNzdiIsIHNlcCA9ICIsIiwgIGluZGV4LmNvbHVtbiA9MCwgaGVhZGVyID0gVCkKIyBkYXRfem9vIDwtIHJlYWQuem9vKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX1VTX0VURl9ydW5zL3Zhcl8xcGNfMjAwOF91c2V0Zi5jc3YiLCBpbmRleC5jb2x1bW49MCwgc2VwPSIsIiwgaGVhZGVyID0gVCwgZm9ybWF0PSIlbS8lZC8lWSIpCiMgZGF0X3pvbyA8LSByZWFkLnpvbygiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9VU19FVEZfcnVucy92YXJfMXBjXzIwMDhfdXNldGYuY3N2IiwgaW5kZXguY29sdW1uPTAsIHNlcD0iLCIsIGhlYWRlciA9IFQsIEZVTj1hcy55ZWFybW9uKQojIHRlc3QxCiMgZGF0X3h0cyA9IGFzLnh0cyhkYXRfem9vLCBvcmRlci5ieSA9IGRhdF96b29bLDFdKQoKYGBgCgojIEltcG9ydGluZyBhbmQgUnVubmluZyBEYXRhc2V0cwoKYGBge3J9CiMgTWVzcyBhcm91bmQgY29kZSAtIGl0IHdvcmtzIQphYmMgPSByZWFkLmNzdigiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9VU19FVEZfcnVucy92YXJfMXBjXzIwMDhfdXNfZXRmLmNzdiIsIHNlcCA9ICIsIiwgaGVhZGVyID0gVCwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQphYmMkSW5kZXggPSBhcy5EYXRlKGFiYyRJbmRleCkKIyBhYmMkaW5kZXhfdCA9IGFzLlBPU0lYY3QoYWJjJEluZGV4LCBmb3JtYXQgPSAiJVktJW0tJWQiKQojIGluZGV4X3QKIyBoZWFkKGFiYykKYWJjX3ggPSB4dHMoYWJjWywtMV0sIG9yZGVyLmJ5ID0gYWJjWywxXSkKIyBoZWFkKGFiY194KQpgYGAKCmBgYHtyfQojJyBBIGZ1bmN0aW9uIHRvIGlucHV0IHRoZSBWYVIgZmlsZXMsIHBsb3QgdGhlbSBhbmQgZ2VuZXJhdGUgdGFibGVzCiMnCiMnIEBwYXJhbSBmaWxlX3BhdGggLSBmaWxlIHBhdGggdG8gdXNlCiMnIEBwYXJhbSBmaWxlbmFtZSAtIG5hbWUgb2YgdGhlIGZpbGUKIycgQHBhcmFtIHRhdSAtIHF1YW50aWxlIHRvIHVzZQojJyBAcGFyYW0gcmVzcF92YXIgLSByZXNwb25zZSB2YXJpYWJsZSB0byB1c2UgaW4gdGhlIHBsb3QKIycgQHBhcmFtIG50ZXN0IC0gbnVtYmVyIG9mIHRlc3QgcG9pbnRzCiMnIEBwYXJhbSBjbl9pbnB1dCAtIGNvbHVtbiBuYW1lIGlucHV0cwojJwojJyBAcmV0dXJuIC0gYSBsaXN0IG9mIHRoZSB4dHMgZmlsZSwgdGhlIHBsb3QsIHRoZSBsb3NzIGxpc3QsIGFuZCB0YWJsZXMKIycgQGV4cG9ydCAtIGEgcGxvdCBhbmQgdGFibGVzCiMnCiMnIEBleGFtcGxlcyAtIHRlc3QgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9VU19FVEZfcnVucy8iLCJ2YXJfMXBjXzIwMDhfdXNfZXRmLmNzdiIsIDAuMDEpCnZhcl9pbnB1dF9kaXNwID0gZnVuY3Rpb24oZmlsZV9wYXRoLCBmaWxlbmFtZSwgdGF1LCByZXNwX3ZhciA9ICJTUFkiLCBudGVzdCA9IDI1MCwgY25faW5wdXQgPSBjKCJTUFkiLCAiTTEiLCAiTTIiLCAiTTMiLCAiTTQiLCAiTTUiLCAiTTYiLCAiTTciLCAiTTgiKSl7CiMgdmFyX2lucHV0X2Rpc3AgPSBmdW5jdGlvbihmaWxlX3BhdGgsIGZpbGVuYW1lLCB0YXUsIHJlc3BfdmFyID0gIlNQWSIsIG50ZXN0ID0gMjUwLCBjbl9pbnB1dCA9IGMoIlNQWSIsICJNViBDQVZpYVIiLCAiTVYgQ0FWaWFSICsgQVIiLCAiTVYgQ0FWaWFSICsgU0FWIiwgIk1WIENBVmlhUiArIEFTIiwgIlNBViIsICJBYnMuIFNsb3BlIiwgIkluZC4gR0FSQ0giLCAiQWRhcHRpdmUiKSl7CiAgIyBJbXBvcnQgZGF0YQogIHBsb3RfbWF0ID0gcmVhZC5jc3YocGFzdGUwKGZpbGVfcGF0aCxmaWxlbmFtZSksIHNlcCA9ICIsIiwgaGVhZGVyID0gVCwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQogICMgRml4IGRhdGUgZm9ybWF0CiAgcGxvdF9tYXQkSW5kZXggPSBhcy5EYXRlKHBsb3RfbWF0JEluZGV4KQogICMgQ29udmVydCB0byBhbiB4dHMKICBwbG90X21hdCA9IHh0cyhwbG90X21hdFssLTFdLCBvcmRlci5ieSA9IHBsb3RfbWF0WywxXSkKICAjIEZpeCBjb2x1bW4gbmFtZXMKICBjb2xuYW1lcyhwbG90X21hdCkgPC0gY25faW5wdXQKICAjIFBsb3QgZXZlcnl0aGluZwogIHBsb3QgPSBwbHRfZGF0YShwbG90X21hdCwgdGF1ID0gdGF1LCByZXNwX3ZhciA9IHJlc3BfdmFyLCBudGVzdCA9IG50ZXN0KQogICMgQ2FsY3VsYXRlIGxvc3NlcwogIGxfbGlzdCA9IGdlbl9sb3NzX3Rlc3QocGxvdF9tYXQsIHRhdSA9IHRhdSkKICAjIFB1dCBpbnRvIHRhYmxlcwogIHRhYmxlcyA9IHByZXR0eV90YWJsZXMocGxvdF9tYXQsIGxfbGlzdCwgdGF1ID0gdGF1LCBudGVzdCA9IG50ZXN0KQogICMgUHJpbnQgdGhlIHRhYmxlcyBhbmQgdGhlIHBsb3QKICBwcmludChwbG90KQogIHByaW50KHRhYmxlcykKICAjIHByaW50KHBtX3RhYmxlKQogICMgUmV0dXJuIHRoZSB4dHMsIHRoZSBwbG90LCB0aGUgbG9zcyBsaXN0LCBhbmQgdGhlIHRhYmxlcwogIHJldHVybihsaXN0KHBsb3RfbWF0LCBwbG90LCBsX2xpc3QsIHRhYmxlcykpCn0KYGBgCgpgYGB7cn0KIyB0ZXN0ID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvIiwidmFyXzFwY18yMDA4X3VzX2V0Zi5jc3YiLCAwLjAxKQpgYGAKCiMgUHJvYmxlbSBTb2x2aW5nIG9uIDQuMjkuMjAyMAoKYGBge3J9CiMgQ3JlYXRlIGEgZmFrZSBkYXRhIGZyYW1lLCBhbmQgYXNzaWduIHNpbGx5IG51bWJlcnMKZGZfRkFLRSA9IGFzLmRhdGEuZnJhbWUoY2JpbmQoMSwyLDMsNCkpCnJvd25hbWVzKGRmX0ZBS0UpIDwtIGMoIk51bWJlcnMiKQpjb2xuYW1lcyhkZl9GQUtFKSA8LSBjKCJPbmUiLCAiVHdvIiwgIlRocmVlIiwgIkZvdXIiKQpkZl9GQUtFICU+JSBrYWJsZShjYXB0aW9uID0gIkZha2UgRGF0YSIsIGRpZ2l0cyA9IDMpICU+JSBrYWJsZV9zdHlsaW5nKCJzdHJpcGVkIiwgZnVsbF93aWR0aCA9IEYpICU+JSBrYWJsZV9zdHlsaW5nKCkgJT4lIGZvb3Rub3RlKGdlbmVyYWwgPSBwYXN0ZSgiQ2FsY3VsYXRlZCB1c2luZyIsIDQsICJmYWtlIGRhdGEgcG9pbnRzIikpCgojIGRmICU+JSBrYWJsZShjYXB0aW9uID0gcGFzdGUoIkNvbXBhcmlzb24gb2YgVmFSIE1ldGhvZHMgZm9yIGEgIiwgdGF1KjEwMCwgIiUgVmFSIiwgc2VwID0gIiIpLCBkaWdpdHMgPSAzKSAlPiUga2FibGVfc3R5bGluZygic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBGKSAlPiUga2FibGVfc3R5bGluZygpICU+JSBmb290bm90ZShnZW5lcmFsID0gcGFzdGUoIkNhbGN1bGF0ZWQgdXNpbmciLCBudGVzdCwgInRyYWRpbmcgZGF5cyBmcm9tIiwgYXMuRGF0ZShzdGFydCksICJ0byIsIGFzLkRhdGUoZW5kKSkpCmBgYAoKCiMjIDIwMDggRW5kaW5nCgojIyMgVS5TLiBFVEZzCgpgYGB7cn0KIyByZXR1cm4obGlzdChwbG90X21hdCwgcGxvdCwgbF9saXN0LCB0YWJsZXMpKQoKIyBDYWxsIHRoZSBhYm92ZSBmdW5jdGlvbgp2MV8yMDA4X3VzZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvIiwidmFyXzFwY18yMDA4X3VzX2V0Zi5jc3YiLCAwLjAxKQpwcmV0dHlfdGFibGVzKHYxXzIwMDhfdXNldGZbWzFdXSwgdjFfMjAwOF91c2V0ZltbM11dLCB0YXUgPSAwLjAxLCBudGVzdCA9IDI1MCkKdjVfMjAwOF91c2V0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX1VTX0VURl9ydW5zLyIsInZhcl81cGNfMjAwOF91c19ldGYuY3N2IiwgMC4wNSkKdjEwXzIwMDhfdXNldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9VU19FVEZfcnVucy8iLCJ2YXJfMTBwY18yMDA4X3VzX2V0Zi5jc3YiLCAwLjEwKQoKIyBoZWFkKHYxMF8yMDA4X3VzZXRmW1sxXV0pCnYxMF8yMDA4X3VzZXRmCmBgYAoKYGBge3J9CiMgMSUsIDUlLCAxMCUgVmFSIC0gMjAwOCAtIDFzdCBzZXQgb2YgcHJlZGljdG9ycwojIHZhcl8xcGNfMjAwOF91c19ldGYgPSBjYXZfc2ltdWwoYygiWExVIiwgIlhMUCIsICJYTFYiLCAiWExLIiwgIlhMWSIsICJYTEkiLCAiWExGIiwgIlhMQiIsICJYTEUiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA0LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAwOC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDksIGxvd19wID0gMSwgaGlnaF9wID0gMTAsIHRhdSA9IDAuMDEsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX1VTX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xcGNfMjAwOF91c19ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xcGNfMjAwOF91c2V0ZltbMV1dKQoKIyB2YXJfNXBjXzIwMDhfdXNfZXRmID0gY2F2X3NpbXVsKGMoIlhMVSIsICJYTFAiLCAiWExWIiwgIlhMSyIsICJYTFkiLCAiWExJIiwgIlhMRiIsICJYTEIiLCAiWExFIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAwNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMDgtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA5LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMDUsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX1VTX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl81cGNfMjAwOF91c19ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl81cGNfMjAwOF91c2V0ZltbMV1dKQoKIyB2YXJfMTBwY18yMDA4X3VzX2V0ZiA9IGNhdl9zaW11bChjKCJYTFUiLCAiWExQIiwgIlhMViIsICJYTEsiLCAiWExZIiwgIlhMSSIsICJYTEYiLCAiWExCIiwgIlhMRSIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMDQtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDA4LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gOSwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9VU19FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfMTBwY18yMDA4X3VzX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzEwcGNfMjAwOF91c2V0ZltbMV1dKQpgYGAKCiMjIyBHbG9iYWwgRVRGcwoKYGBge3J9CiMgQ2FsbCB0aGUgYWJvdmUgZnVuY3Rpb24KdjFfMjAwOF9nbG9iZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfZ2xvYl9FVEZfcnVucy8iLCJ2YXJfMXBjXzIwMDhfZ2xvYl9ldGYuY3N2IiwgMC4wMSkKdjVfMjAwOF9nbG9iZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfZ2xvYl9FVEZfcnVucy8iLCJ2YXJfNXBjXzIwMDhfZ2xvYl9ldGYuY3N2IiwgMC4wNSkKdjEwXzIwMDhfZ2xvYmV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2dsb2JfRVRGX3J1bnMvIiwidmFyXzEwcGNfMjAwOF9nbG9iX2V0Zi5jc3YiLCAwLjEwKQpgYGAKCmBgYHtyfQojIDElLCA1JSwgMTAlIFZhUiAtIDIwMDggLSAybmQgc2V0IG9mIHByZWRpY3RvcnMKIyB2YXJfMXBjXzIwMDhfZ2xvYl9ldGYgPSBjYXZfc2ltdWwoYygiSlhJIiwgIktYSSIsICJJWEoiLCAiSVhQIiwgIklYTiIsICJSWEkiLCAiRVhJIiwgIklYRyIsICJNWEkiLCAiSVhDIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAwNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMDgtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSAxMCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCwgdGF1ID0gMC4wMSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfZ2xvYl9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfMXBjXzIwMDhfZ2xvYl9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xcGNfMjAwOF91c2V0ZltbMV1dKQoKIyB2YXJfNXBjXzIwMDhfZ2xvYl9ldGYgPSBjYXZfc2ltdWwoYygiSlhJIiwgIktYSSIsICJJWEoiLCAiSVhQIiwgIklYTiIsICJSWEkiLCAiRVhJIiwgIklYRyIsICJNWEkiLCAiSVhDIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAwNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMDgtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSAxMCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjA1LCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9nbG9iX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl81cGNfMjAwOF9nbG9iX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzVwY18yMDA4X3VzZXRmW1sxXV0pCgojIHZhcl8xMHBjXzIwMDhfZ2xvYl9ldGYgPSBjYXZfc2ltdWwoYygiSlhJIiwgIktYSSIsICJJWEoiLCAiSVhQIiwgIklYTiIsICJSWEkiLCAiRVhJIiwgIklYRyIsICJNWEkiLCAiSVhDIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAwNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMDgtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSAxMCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9nbG9iX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xMHBjXzIwMDhfZ2xvYl9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xMHBjXzIwMDhfdXNldGZbWzFdXSkKYGBgCgojIyMgQ29tbW9kaXR5IEVURnMKCmBgYHtyfQojIDElLCA1JSwgMTAlIFZhUiAtIDIwMDggLSAzcmQgc2V0IG9mIHByZWRpY3RvcnMKIyB2YXJfMXBjXzIwMDhfY29tbV9ldGYgPSBjYXZfc2ltdWwoYygiREJBIiwgIkRCQyIsICJEQkUiLCAiREJCIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAwNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMDgtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA0LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLCB0YXUgPSAwLjAxLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9jb21tX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xcGNfMjAwOF9jb21tX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDA4X3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAwOF9jb21tX2V0ZiA9IGNhdl9zaW11bChjKCJEQkEiLCAiREJDIiwgIkRCRSIsICJEQkIiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA0LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAwOC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDQsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsdGF1ID0gMC4wNSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfY29tbV9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfNXBjXzIwMDhfY29tbV9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl81cGNfMjAwOF91c2V0ZltbMV1dKQoKIyB2YXJfMTBwY18yMDA4X2NvbW1fZXRmID0gY2F2X3NpbXVsKGMoIkRCQSIsICJEQkMiLCAiREJFIiwgIkRCQiIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMDQtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDA4LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gNCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9jb21tX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xMHBjXzIwMDhfY29tbV9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xMHBjXzIwMDhfdXNldGZbWzFdXSkKYGBgCgoKCiMjIyBCb25kIEVURnMKCmBgYHtyfQojIENhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uCnYxXzIwMDhfYm9uZGV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2JvbmRfRVRGX3J1bnMvIiwidmFyXzFwY18yMDA4X2JvbmRfZXRmLmNzdiIsIDAuMDEpCnY1XzIwMDhfYm9uZGV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2JvbmRfRVRGX3J1bnMvIiwidmFyXzVwY18yMDA4X2JvbmRfZXRmLmNzdiIsIDAuMDUpCnYxMF8yMDA4X2JvbmRldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9ib25kX0VURl9ydW5zLyIsInZhcl8xMHBjXzIwMDhfYm9uZF9ldGYuY3N2IiwgMC4xMCkKYGBgCgpgYGB7cn0KIyBpU2hhcmVzIDEtMyBZZWFyIFRyZWFzdXJ5IEJvbmQgRnVuZCAoU0hZKQojIGlTaGFyZXMgNy0xMCBZZWFyIFRyZWFzdXJ5IEJvbmQgRnVuZCAoSUVGKQojIGlTaGFyZXMgMjArIFllYXIgVHJlYXN1cnkgQm9uZCBGdW5kIChUTFQpCiMgaVNoYXJlcyBpQm94eCAkIEludmVzdG1lbnQgR3JhZGUgQ29ycG9yYXRlIEJvbmQgRVRGIChMUUQpCgojIDElLCA1JSwgMTAlIFZhUiAtIDIwMDggLSA0dGggc2V0IG9mIHByZWRpY3RvcnMKIyB2YXJfMXBjXzIwMDhfYm9uZF9ldGYgPSBjYXZfc2ltdWwoYygiU0hZIiwgIklFRiIsICJUTFQiLCAiTFFEIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAwNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMDgtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA0LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLCB0YXUgPSAwLjAxLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9ib25kX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xcGNfMjAwOF9ib25kX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDA4X3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAwOF9ib25kX2V0ZiA9IGNhdl9zaW11bChjKCJTSFkiLCAiSUVGIiwgIlRMVCIsICJMUUQiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA0LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAwOC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDQsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsdGF1ID0gMC4wNSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYm9uZF9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfNXBjXzIwMDhfYm9uZF9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl81cGNfMjAwOF91c2V0ZltbMV1dKQoKIyB2YXJfMTBwY18yMDA4X2JvbmRfZXRmID0gY2F2X3NpbXVsKGMoIlNIWSIsICJJRUYiLCAiVExUIiwgIkxRRCIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMDQtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDA4LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gNCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9ib25kX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xMHBjXzIwMDhfYm9uZF9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xMHBjXzIwMDhfdXNldGZbWzFdXSkKYGBgCgojIyMgQWxsIEVURnMKCmBgYHtyfQojIENhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uCnYxXzIwMDhfYWxsZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYWxsX0VURl9ydW5zLyIsInZhcl8xcGNfMjAwOF9hbGxfZXRmLmNzdiIsIDAuMDEpCnY1XzIwMDhfYWxsZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYWxsX0VURl9ydW5zLyIsInZhcl81cGNfMjAwOF9hbGxfZXRmLmNzdiIsIDAuMDUpCnYxMF8yMDA4X2FsbGV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2FsbF9FVEZfcnVucy8iLCJ2YXJfMTBwY18yMDA4X2FsbF9ldGYuY3N2IiwgMC4xMCkKYGBgCgpgYGB7cn0KIyAxJSwgNSUsIDEwJSBWYVIgLSAyMDA4IC0gNXRoIHNldCBvZiBwcmVkaWN0b3JzCiMgdmFyXzFwY18yMDA4X2FsbF9ldGYgPSBjYXZfc2ltdWwoYygiWExVIiwgIlhMUCIsICJYTFYiLCAiWExLIiwgIlhMWSIsICJYTEkiLCAiWExGIiwgIlhMQiIsICJYTEUiLCAiSlhJIiwgIktYSSIsICJJWEoiLCAiSVhQIiwgIklYTiIsICJSWEkiLCAiRVhJIiwgIklYRyIsICJNWEkiLCAiSVhDIiwgIlNIWSIsICJJRUYiLCAiVExUIiwgIkxRRCIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMDQtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDA4LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gMjMsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsIHRhdSA9IDAuMDEsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2FsbF9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfMXBjXzIwMDhfYWxsX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDA4X3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAwOF9hbGxfZXRmID0gY2F2X3NpbXVsKGMoIlhMVSIsICJYTFAiLCAiWExWIiwgIlhMSyIsICJYTFkiLCAiWExJIiwgIlhMRiIsICJYTEIiLCAiWExFIiwgIkpYSSIsICJLWEkiLCAiSVhKIiwgIklYUCIsICJJWE4iLCAiUlhJIiwgIkVYSSIsICJJWEciLCAiTVhJIiwgIklYQyIsICJTSFkiLCAiSUVGIiwgIlRMVCIsICJMUUQiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA0LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAwOC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDIzLCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMDUsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2FsbF9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfNXBjXzIwMDhfYWxsX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzVwY18yMDA4X3VzZXRmW1sxXV0pCgojIHZhcl8xMHBjXzIwMDhfYWxsX2V0ZiA9IGNhdl9zaW11bChjKCJYTFUiLCAiWExQIiwgIlhMViIsICJYTEsiLCAiWExZIiwgIlhMSSIsICJYTEYiLCAiWExCIiwgIlhMRSIsICJKWEkiLCAiS1hJIiwgIklYSiIsICJJWFAiLCAiSVhOIiwgIlJYSSIsICJFWEkiLCAiSVhHIiwgIk1YSSIsICJJWEMiLCAiU0hZIiwgIklFRiIsICJUTFQiLCAiTFFEIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAwNC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMDgtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSAyMywgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9hbGxfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzEwcGNfMjAwOF9hbGxfZXRmLmNzdiIsIHV2X2xpc3QgPSB2YXJfMTBwY18yMDA4X3VzZXRmW1sxXV0pCmBgYAoKIyMgMjAxMCBFbmRpbmcKCiMjIyBVLlMuIEVURnMKCmBgYHtyfQojIENhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uCnYxXzIwMTBfdXNldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9VU19FVEZfcnVucy8iLCJ2YXJfMXBjXzIwMTBfdXNfZXRmLmNzdiIsIDAuMDEpCnY1XzIwMTBfdXNldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9VU19FVEZfcnVucy8iLCJ2YXJfNXBjXzIwMTBfdXNfZXRmLmNzdiIsIDAuMDUpCnYxMF8yMDEwX3VzZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvIiwidmFyXzEwcGNfMjAxMF91c19ldGYuY3N2IiwgMC4xMCkKYGBgCgpgYGB7cn0KIyAxJSwgNSUsIDEwJSBWYVIgLSAyMDEwIC0gMXN0IHNldCBvZiBwcmVkaWN0b3JzCiMgdmFyXzFwY18yMDEwX3VzX2V0ZiA9IGNhdl9zaW11bChjKCJYTFUiLCAiWExQIiwgIlhMViIsICJYTEsiLCAiWExZIiwgIlhMSSIsICJYTEYiLCAiWExCIiwgIlhMRSIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMDYtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDEwLTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gOSwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCwgdGF1ID0gMC4wMSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzFwY18yMDEwX3VzX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDEwX3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAxMF91c19ldGYgPSBjYXZfc2ltdWwoYygiWExVIiwgIlhMUCIsICJYTFYiLCAiWExLIiwgIlhMWSIsICJYTEkiLCAiWExGIiwgIlhMQiIsICJYTEUiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA2LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxMC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDksIGxvd19wID0gMSwgaGlnaF9wID0gMTAsdGF1ID0gMC4wNSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzVwY18yMDEwX3VzX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzVwY18yMDEwX3VzZXRmW1sxXV0pCgojIHZhcl8xMHBjXzIwMTBfdXNfZXRmID0gY2F2X3NpbXVsKGMoIlhMVSIsICJYTFAiLCAiWExWIiwgIlhMSyIsICJYTFkiLCAiWExJIiwgIlhMRiIsICJYTEIiLCAiWExFIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAwNi0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTAtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA5LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMTAsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX1VTX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xMHBjXzIwMTBfdXNfZXRmLmNzdiIsIHV2X2xpc3QgPSB2YXJfMTBwY18yMDEwX3VzZXRmW1sxXV0pCmBgYAoKIyMjIEdsb2JhbCBFVEZzCgpgYGB7cn0KIyBDYWxsIHRoZSBhYm92ZSBmdW5jdGlvbgp2MV8yMDEwX2dsb2JldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9nbG9iX0VURl9ydW5zLyIsInZhcl8xcGNfMjAxMF9nbG9iX2V0Zi5jc3YiLCAwLjAxKQp2NV8yMDEwX2dsb2JldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9nbG9iX0VURl9ydW5zLyIsInZhcl81cGNfMjAxMF9nbG9iX2V0Zi5jc3YiLCAwLjA1KQp2MTBfMjAxMF9nbG9iZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfZ2xvYl9FVEZfcnVucy8iLCJ2YXJfMTBwY18yMDEwX2dsb2JfZXRmLmNzdiIsIDAuMTApCmBgYAoKYGBge3J9CiMgMSUsIDUlLCAxMCUgVmFSIC0gMjAxMCAtIDJuZCBzZXQgb2YgcHJlZGljdG9ycwojIHZhcl8xcGNfMjAxMF9nbG9iX2V0ZiA9IGNhdl9zaW11bChjKCJKWEkiLCAiS1hJIiwgIklYSiIsICJJWFAiLCAiSVhOIiwgIlJYSSIsICJFWEkiLCAiSVhHIiwgIk1YSSIsICJJWEMiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA2LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxMC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDEwLCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLCB0YXUgPSAwLjAxLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9nbG9iX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xcGNfMjAxMF9nbG9iX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDEwX3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAxMF9nbG9iX2V0ZiA9IGNhdl9zaW11bChjKCJKWEkiLCAiS1hJIiwgIklYSiIsICJJWFAiLCAiSVhOIiwgIlJYSSIsICJFWEkiLCAiSVhHIiwgIk1YSSIsICJJWEMiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA2LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxMC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDEwLCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMDUsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2dsb2JfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzVwY18yMDEwX2dsb2JfZXRmLmNzdiIsIHV2X2xpc3QgPSB2YXJfNXBjXzIwMTBfdXNldGZbWzFdXSkKCiMgdmFyXzEwcGNfMjAxMF9nbG9iX2V0ZiA9IGNhdl9zaW11bChjKCJKWEkiLCAiS1hJIiwgIklYSiIsICJJWFAiLCAiSVhOIiwgIlJYSSIsICJFWEkiLCAiSVhHIiwgIk1YSSIsICJJWEMiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA2LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxMC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDEwLCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMTAsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2dsb2JfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzEwcGNfMjAxMF9nbG9iX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzEwcGNfMjAxMF91c2V0ZltbMV1dKQpgYGAKCiMjIyBDb21tb2RpdHkgRVRGcwoKYGBge3J9CiMgMSUsIDUlLCAxMCUgVmFSIC0gMjAxMCAtIDNyZCBzZXQgb2YgcHJlZGljdG9ycwojIHZhcl8xcGNfMjAxMF9jb21tX2V0ZiA9IGNhdl9zaW11bChjKCJEQkEiLCAiREJDIiwgIkRCRSIsICJEQkIiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA2LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxMC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDQsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsIHRhdSA9IDAuMDEsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2NvbW1fRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzFwY18yMDEwX2NvbW1fZXRmLmNzdiIsIHV2X2xpc3QgPSB2YXJfMXBjXzIwMTBfdXNldGZbWzFdXSkKCiMgdmFyXzVwY18yMDEwX2NvbW1fZXRmID0gY2F2X3NpbXVsKGMoIkRCQSIsICJEQkMiLCAiREJFIiwgIkRCQiIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMDYtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDEwLTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gNCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjA1LCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9jb21tX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl81cGNfMjAxMF9jb21tX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzVwY18yMDEwX3VzZXRmW1sxXV0pCgojIHZhcl8xMHBjXzIwMTBfY29tbV9ldGYgPSBjYXZfc2ltdWwoYygiREJBIiwgIkRCQyIsICJEQkUiLCAiREJCIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAwNi0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTAtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA0LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMTAsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2NvbW1fRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzEwcGNfMjAxMF9jb21tX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzEwcGNfMjAxMF91c2V0ZltbMV1dKQpgYGAKCiMjIyBCb25kIEVURnMKCmBgYHtyfQojIENhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uCnYxXzIwMTBfYm9uZGV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2JvbmRfRVRGX3J1bnMvIiwidmFyXzFwY18yMDEwX2JvbmRfZXRmLmNzdiIsIDAuMDEpCnY1XzIwMTBfYm9uZGV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2JvbmRfRVRGX3J1bnMvIiwidmFyXzVwY18yMDEwX2JvbmRfZXRmLmNzdiIsIDAuMDUpCnYxMF8yMDEwX2JvbmRldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9ib25kX0VURl9ydW5zLyIsInZhcl8xMHBjXzIwMTBfYm9uZF9ldGYuY3N2IiwgMC4xMCkKYGBgCgpgYGB7cn0KIyBpU2hhcmVzIDEtMyBZZWFyIFRyZWFzdXJ5IEJvbmQgRnVuZCAoU0hZKQojIGlTaGFyZXMgNy0xMCBZZWFyIFRyZWFzdXJ5IEJvbmQgRnVuZCAoSUVGKQojIGlTaGFyZXMgMjArIFllYXIgVHJlYXN1cnkgQm9uZCBGdW5kIChUTFQpCiMgaVNoYXJlcyBpQm94eCAkIEludmVzdG1lbnQgR3JhZGUgQ29ycG9yYXRlIEJvbmQgRVRGIChMUUQpCgojIDElLCA1JSwgMTAlIFZhUiAtIDIwMTAgLSA0dGggc2V0IG9mIHByZWRpY3RvcnMKIyB2YXJfMXBjXzIwMTBfYm9uZF9ldGYgPSBjYXZfc2ltdWwoYygiU0hZIiwgIklFRiIsICJUTFQiLCAiTFFEIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAwNi0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTAtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA0LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLCB0YXUgPSAwLjAxLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9ib25kX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xcGNfMjAxMF9ib25kX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDEwX3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAxMF9ib25kX2V0ZiA9IGNhdl9zaW11bChjKCJTSFkiLCAiSUVGIiwgIlRMVCIsICJMUUQiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA2LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxMC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDQsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsdGF1ID0gMC4wNSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYm9uZF9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfNXBjXzIwMTBfYm9uZF9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl81cGNfMjAxMF91c2V0ZltbMV1dKQoKIyB2YXJfMTBwY18yMDEwX2JvbmRfZXRmID0gY2F2X3NpbXVsKGMoIlNIWSIsICJJRUYiLCAiVExUIiwgIkxRRCIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMDYtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDEwLTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gNCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9ib25kX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xMHBjXzIwMTBfYm9uZF9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xMHBjXzIwMTBfdXNldGZbWzFdXSkKYGBgCgojIyMgQWxsIEVURnMKCmBgYHtyfQojIENhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uCnYxXzIwMTBfYWxsZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYWxsX0VURl9ydW5zLyIsInZhcl8xcGNfMjAxMF9hbGxfZXRmLmNzdiIsIDAuMDEpCnY1XzIwMTBfYWxsZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYWxsX0VURl9ydW5zLyIsInZhcl81cGNfMjAxMF9hbGxfZXRmLmNzdiIsIDAuMDUpCnYxMF8yMDEwX2FsbGV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2FsbF9FVEZfcnVucy8iLCJ2YXJfMTBwY18yMDEwX2FsbF9ldGYuY3N2IiwgMC4xMCkKYGBgCgpgYGB7cn0KIyAxJSwgNSUsIDEwJSBWYVIgLSAyMDEwIC0gNXRoIHNldCBvZiBwcmVkaWN0b3JzCiMgdmFyXzFwY18yMDEwX2FsbF9ldGYgPSBjYXZfc2ltdWwoYygiWExVIiwgIlhMUCIsICJYTFYiLCAiWExLIiwgIlhMWSIsICJYTEkiLCAiWExGIiwgIlhMQiIsICJYTEUiLCAiSlhJIiwgIktYSSIsICJJWEoiLCAiSVhQIiwgIklYTiIsICJSWEkiLCAiRVhJIiwgIklYRyIsICJNWEkiLCAiSVhDIiwgIlNIWSIsICJJRUYiLCAiVExUIiwgIkxRRCIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMDYtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDEwLTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gMjMsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsIHRhdSA9IDAuMDEsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2FsbF9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfMXBjXzIwMTBfYWxsX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDEwX3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAxMF9hbGxfZXRmID0gY2F2X3NpbXVsKGMoIlhMVSIsICJYTFAiLCAiWExWIiwgIlhMSyIsICJYTFkiLCAiWExJIiwgIlhMRiIsICJYTEIiLCAiWExFIiwgIkpYSSIsICJLWEkiLCAiSVhKIiwgIklYUCIsICJJWE4iLCAiUlhJIiwgIkVYSSIsICJJWEciLCAiTVhJIiwgIklYQyIsICJTSFkiLCAiSUVGIiwgIlRMVCIsICJMUUQiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA2LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxMC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDIzLCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMDUsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2FsbF9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfNXBjXzIwMTBfYWxsX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzVwY18yMDEwX3VzZXRmW1sxXV0pCgojIHZhcl8xMHBjXzIwMTBfYWxsX2V0ZiA9IGNhdl9zaW11bChjKCJYTFUiLCAiWExQIiwgIlhMViIsICJYTEsiLCAiWExZIiwgIlhMSSIsICJYTEYiLCAiWExCIiwgIlhMRSIsICJKWEkiLCAiS1hJIiwgIklYSiIsICJJWFAiLCAiSVhOIiwgIlJYSSIsICJFWEkiLCAiSVhHIiwgIk1YSSIsICJJWEMiLCAiU0hZIiwgIklFRiIsICJUTFQiLCAiTFFEIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAwNi0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTAtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSAyMywgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9hbGxfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzEwcGNfMjAxMF9hbGxfZXRmLmNzdiIsIHV2X2xpc3QgPSB2YXJfMTBwY18yMDEwX3VzZXRmW1sxXV0pCmBgYAoKIyMgMjAxNCBFbmRpbmcKCiMjIyBVLlMuIEVURnMKCmBgYHtyfQojIENhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uCnYxXzIwMTRfdXNldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9VU19FVEZfcnVucy8iLCJ2YXJfMXBjXzIwMTRfdXNfZXRmLmNzdiIsIDAuMDEpCnY1XzIwMTRfdXNldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9VU19FVEZfcnVucy8iLCJ2YXJfNXBjXzIwMTRfdXNfZXRmLmNzdiIsIDAuMDUpCnYxMF8yMDE0X3VzZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvIiwidmFyXzEwcGNfMjAxNF91c19ldGYuY3N2IiwgMC4xMCkKYGBgCgpgYGB7cn0KIyAxJSwgNSUsIDEwJSBWYVIgLSAyMDE0IC0gMXN0IHNldCBvZiBwcmVkaWN0b3JzCiMgdmFyXzFwY18yMDE0X3VzX2V0ZiA9IGNhdl9zaW11bChjKCJYTFUiLCAiWExQIiwgIlhMViIsICJYTEsiLCAiWExZIiwgIlhMSSIsICJYTEYiLCAiWExCIiwgIlhMRSIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMTAtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDE0LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gOSwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCwgdGF1ID0gMC4wMSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzFwY18yMDE0X3VzX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDE0X3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAxNF91c19ldGYgPSBjYXZfc2ltdWwoYygiWExVIiwgIlhMUCIsICJYTFYiLCAiWExLIiwgIlhMWSIsICJYTEkiLCAiWExGIiwgIlhMQiIsICJYTEUiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDEwLTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxNC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDksIGxvd19wID0gMSwgaGlnaF9wID0gMTAsdGF1ID0gMC4wNSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzVwY18yMDE0X3VzX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzVwY18yMDE0X3VzZXRmW1sxXV0pCgojIHZhcl8xMHBjXzIwMTRfdXNfZXRmID0gY2F2X3NpbXVsKGMoIlhMVSIsICJYTFAiLCAiWExWIiwgIlhMSyIsICJYTFkiLCAiWExJIiwgIlhMRiIsICJYTEIiLCAiWExFIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAxMC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTQtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA5LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMTAsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX1VTX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xMHBjXzIwMTRfdXNfZXRmLmNzdiIsIHV2X2xpc3QgPSB2YXJfMTBwY18yMDE0X3VzZXRmW1sxXV0pCmBgYAoKIyMjIEdsb2JhbCBFVEZzCgpgYGB7cn0KIyBDYWxsIHRoZSBhYm92ZSBmdW5jdGlvbgp2MV8yMDE0X2dsb2JldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9nbG9iX0VURl9ydW5zLyIsInZhcl8xcGNfMjAxNF9nbG9iX2V0Zi5jc3YiLCAwLjAxKQp2NV8yMDE0X2dsb2JldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9nbG9iX0VURl9ydW5zLyIsInZhcl81cGNfMjAxNF9nbG9iX2V0Zi5jc3YiLCAwLjA1KQp2MTBfMjAxNF9nbG9iZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfZ2xvYl9FVEZfcnVucy8iLCJ2YXJfMTBwY18yMDE0X2dsb2JfZXRmLmNzdiIsIDAuMTApCmBgYAoKYGBge3J9CiMgMSUsIDUlLCAxMCUgVmFSIC0gMjAxNCAtIDJuZCBzZXQgb2YgcHJlZGljdG9ycwojIHZhcl8xcGNfMjAxNF9nbG9iX2V0ZiA9IGNhdl9zaW11bChjKCJKWEkiLCAiS1hJIiwgIklYSiIsICJJWFAiLCAiSVhOIiwgIlJYSSIsICJFWEkiLCAiSVhHIiwgIk1YSSIsICJJWEMiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDEwLTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxNC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDEwLCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLCB0YXUgPSAwLjAxLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9nbG9iX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xcGNfMjAxNF9nbG9iX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDE0X3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAxNF9nbG9iX2V0ZiA9IGNhdl9zaW11bChjKCJKWEkiLCAiS1hJIiwgIklYSiIsICJJWFAiLCAiSVhOIiwgIlJYSSIsICJFWEkiLCAiSVhHIiwgIk1YSSIsICJJWEMiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDEwLTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxNC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDEwLCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMDUsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2dsb2JfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzVwY18yMDE0X2dsb2JfZXRmLmNzdiIsIHV2X2xpc3QgPSB2YXJfNXBjXzIwMTRfdXNldGZbWzFdXSkKCiMgdmFyXzEwcGNfMjAxNF9nbG9iX2V0ZiA9IGNhdl9zaW11bChjKCJKWEkiLCAiS1hJIiwgIklYSiIsICJJWFAiLCAiSVhOIiwgIlJYSSIsICJFWEkiLCAiSVhHIiwgIk1YSSIsICJJWEMiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDEwLTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxNC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDEwLCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMTAsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2dsb2JfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzEwcGNfMjAxNF9nbG9iX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzEwcGNfMjAxNF91c2V0ZltbMV1dKQpgYGAKCiMjIyBDb21tb2RpdHkgRVRGcwoKYGBge3J9CiMgMSUsIDUlLCAxMCUgVmFSIC0gMjAxNCAtIDNyZCBzZXQgb2YgcHJlZGljdG9ycwojIHZhcl8xcGNfMjAxNF9jb21tX2V0ZiA9IGNhdl9zaW11bChjKCJEQkEiLCAiREJDIiwgIkRCRSIsICJEQkIiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDEwLTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxNC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDQsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsIHRhdSA9IDAuMDEsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2NvbW1fRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzFwY18yMDE0X2NvbW1fZXRmLmNzdiIsIHV2X2xpc3QgPSB2YXJfMXBjXzIwMTRfdXNldGZbWzFdXSkKCiMgdmFyXzVwY18yMDE0X2NvbW1fZXRmID0gY2F2X3NpbXVsKGMoIkRCQSIsICJEQkMiLCAiREJFIiwgIkRCQiIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMTAtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDE0LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gNCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjA1LCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9jb21tX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl81cGNfMjAxNF9jb21tX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzVwY18yMDE0X3VzZXRmW1sxXV0pCgojIHZhcl8xMHBjXzIwMTRfY29tbV9ldGYgPSBjYXZfc2ltdWwoYygiREJBIiwgIkRCQyIsICJEQkUiLCAiREJCIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAxMC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTQtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA0LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMTAsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2NvbW1fRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzEwcGNfMjAxNF9jb21tX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzEwcGNfMjAxNF91c2V0ZltbMV1dKQpgYGAKCiMjIyBCb25kIEVURnMKCmBgYHtyfQojIENhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uCnYxXzIwMTRfYm9uZGV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2JvbmRfRVRGX3J1bnMvIiwidmFyXzFwY18yMDE0X2JvbmRfZXRmLmNzdiIsIDAuMDEpCnY1XzIwMTRfYm9uZGV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2JvbmRfRVRGX3J1bnMvIiwidmFyXzVwY18yMDE0X2JvbmRfZXRmLmNzdiIsIDAuMDUpCnYxMF8yMDE0X2JvbmRldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9ib25kX0VURl9ydW5zLyIsInZhcl8xMHBjXzIwMTRfYm9uZF9ldGYuY3N2IiwgMC4xMCkKYGBgCgpgYGB7cn0KIyBpU2hhcmVzIDEtMyBZZWFyIFRyZWFzdXJ5IEJvbmQgRnVuZCAoU0hZKQojIGlTaGFyZXMgNy0xMCBZZWFyIFRyZWFzdXJ5IEJvbmQgRnVuZCAoSUVGKQojIGlTaGFyZXMgMjArIFllYXIgVHJlYXN1cnkgQm9uZCBGdW5kIChUTFQpCiMgaVNoYXJlcyBpQm94eCAkIEludmVzdG1lbnQgR3JhZGUgQ29ycG9yYXRlIEJvbmQgRVRGIChMUUQpCgojIDElLCA1JSwgMTAlIFZhUiAtIDIwMTQgLSA0dGggc2V0IG9mIHByZWRpY3RvcnMKIyB2YXJfMXBjXzIwMTRfYm9uZF9ldGYgPSBjYXZfc2ltdWwoYygiU0hZIiwgIklFRiIsICJUTFQiLCAiTFFEIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAxMC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTQtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA0LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLCB0YXUgPSAwLjAxLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9ib25kX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xcGNfMjAxNF9ib25kX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDE0X3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAxNF9ib25kX2V0ZiA9IGNhdl9zaW11bChjKCJTSFkiLCAiSUVGIiwgIlRMVCIsICJMUUQiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDEwLTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxNC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDQsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsdGF1ID0gMC4wNSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYm9uZF9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfNXBjXzIwMTRfYm9uZF9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl81cGNfMjAxNF91c2V0ZltbMV1dKQoKIyB2YXJfMTBwY18yMDE0X2JvbmRfZXRmID0gY2F2X3NpbXVsKGMoIlNIWSIsICJJRUYiLCAiVExUIiwgIkxRRCIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMTAtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDE0LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gNCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9ib25kX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xMHBjXzIwMTRfYm9uZF9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xMHBjXzIwMTRfdXNldGZbWzFdXSkKYGBgCgojIyMgQWxsIEVURnMKCmBgYHtyfQojIENhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uCnYxXzIwMTRfYWxsZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYWxsX0VURl9ydW5zLyIsInZhcl8xcGNfMjAxNF9hbGxfZXRmLmNzdiIsIDAuMDEpCnY1XzIwMTRfYWxsZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYWxsX0VURl9ydW5zLyIsInZhcl81cGNfMjAxNF9hbGxfZXRmLmNzdiIsIDAuMDUpCnYxMF8yMDE0X2FsbGV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2FsbF9FVEZfcnVucy8iLCJ2YXJfMTBwY18yMDE0X2FsbF9ldGYuY3N2IiwgMC4xMCkKYGBgCgpgYGB7cn0KIyAxJSwgNSUsIDEwJSBWYVIgLSAyMDE0IC0gNXRoIHNldCBvZiBwcmVkaWN0b3JzCiMgdmFyXzFwY18yMDE0X2FsbF9ldGYgPSBjYXZfc2ltdWwoYygiWExVIiwgIlhMUCIsICJYTFYiLCAiWExLIiwgIlhMWSIsICJYTEkiLCAiWExGIiwgIlhMQiIsICJYTEUiLCAiSlhJIiwgIktYSSIsICJJWEoiLCAiSVhQIiwgIklYTiIsICJSWEkiLCAiRVhJIiwgIklYRyIsICJNWEkiLCAiSVhDIiwgIlNIWSIsICJJRUYiLCAiVExUIiwgIkxRRCIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMTAtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDE0LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gMjMsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsIHRhdSA9IDAuMDEsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2FsbF9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfMXBjXzIwMTRfYWxsX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDE0X3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAxNF9hbGxfZXRmID0gY2F2X3NpbXVsKGMoIlhMVSIsICJYTFAiLCAiWExWIiwgIlhMSyIsICJYTFkiLCAiWExJIiwgIlhMRiIsICJYTEIiLCAiWExFIiwgIkpYSSIsICJLWEkiLCAiSVhKIiwgIklYUCIsICJJWE4iLCAiUlhJIiwgIkVYSSIsICJJWEciLCAiTVhJIiwgIklYQyIsICJTSFkiLCAiSUVGIiwgIlRMVCIsICJMUUQiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDEwLTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxNC0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDIzLCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMDUsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2FsbF9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfNXBjXzIwMTRfYWxsX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzVwY18yMDE0X3VzZXRmW1sxXV0pCgojIHZhcl8xMHBjXzIwMTRfYWxsX2V0ZiA9IGNhdl9zaW11bChjKCJYTFUiLCAiWExQIiwgIlhMViIsICJYTEsiLCAiWExZIiwgIlhMSSIsICJYTEYiLCAiWExCIiwgIlhMRSIsICJKWEkiLCAiS1hJIiwgIklYSiIsICJJWFAiLCAiSVhOIiwgIlJYSSIsICJFWEkiLCAiSVhHIiwgIk1YSSIsICJJWEMiLCAiU0hZIiwgIklFRiIsICJUTFQiLCAiTFFEIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAxMC0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTQtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSAyMywgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9hbGxfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzEwcGNfMjAxNF9hbGxfZXRmLmNzdiIsIHV2X2xpc3QgPSB2YXJfMTBwY18yMDE0X3VzZXRmW1sxXV0pCmBgYAoKCiMjIDIwMTYgRW5kaW5nCgojIyMgVS5TLiBFVEZzCgpgYGB7cn0KIyBDYWxsIHRoZSBhYm92ZSBmdW5jdGlvbgp2MV8yMDE2X3VzZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvIiwidmFyXzFwY18yMDE2X3VzX2V0Zi5jc3YiLCAwLjAxKQp2NV8yMDE2X3VzZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfVVNfRVRGX3J1bnMvIiwidmFyXzVwY18yMDE2X3VzX2V0Zi5jc3YiLCAwLjA1KQp2MTBfMjAxNl91c2V0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX1VTX0VURl9ydW5zLyIsInZhcl8xMHBjXzIwMTZfdXNfZXRmLmNzdiIsIDAuMTApCmBgYAoKYGBge3J9CiMgMSUsIDUlLCAxMCUgVmFSIC0gMjAxNiAtIDFzdCBzZXQgb2YgcHJlZGljdG9ycwojIHZhcl8xcGNfMjAxNl91c19ldGYgPSBjYXZfc2ltdWwoYygiWExVIiwgIlhMUCIsICJYTFYiLCAiWExLIiwgIlhMWSIsICJYTEkiLCAiWExGIiwgIlhMQiIsICJYTEUiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDEyLTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxNi0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDksIGxvd19wID0gMSwgaGlnaF9wID0gMTAsIHRhdSA9IDAuMDEsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX1VTX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xcGNfMjAxNl91c19ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xcGNfMjAxNl91c2V0ZltbMV1dKQoKIyB2YXJfNXBjXzIwMTZfdXNfZXRmID0gY2F2X3NpbXVsKGMoIlhMVSIsICJYTFAiLCAiWExWIiwgIlhMSyIsICJYTFkiLCAiWExJIiwgIlhMRiIsICJYTEIiLCAiWExFIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAxMi0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTYtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA5LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMDUsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX1VTX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl81cGNfMjAxNl91c19ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl81cGNfMjAxNl91c2V0ZltbMV1dKQoKIyB2YXJfMTBwY18yMDE2X3VzX2V0ZiA9IGNhdl9zaW11bChjKCJYTFUiLCAiWExQIiwgIlhMViIsICJYTEsiLCAiWExZIiwgIlhMSSIsICJYTEYiLCAiWExCIiwgIlhMRSIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMTItMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDE2LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gOSwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9VU19FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfMTBwY18yMDE2X3VzX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzEwcGNfMjAxNl91c2V0ZltbMV1dKQpgYGAKCiMjIyBHbG9iYWwgRVRGcwoKYGBge3J9CiMgQ2FsbCB0aGUgYWJvdmUgZnVuY3Rpb24KdjFfMjAxNl9nbG9iZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfZ2xvYl9FVEZfcnVucy8iLCJ2YXJfMXBjXzIwMTZfZ2xvYl9ldGYuY3N2IiwgMC4wMSkKdjVfMjAxNl9nbG9iZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfZ2xvYl9FVEZfcnVucy8iLCJ2YXJfNXBjXzIwMTZfZ2xvYl9ldGYuY3N2IiwgMC4wNSkKdjEwXzIwMTZfZ2xvYmV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2dsb2JfRVRGX3J1bnMvIiwidmFyXzEwcGNfMjAxNl9nbG9iX2V0Zi5jc3YiLCAwLjEwKQpgYGAKCmBgYHtyfQojIDElLCA1JSwgMTAlIFZhUiAtIDIwMTYgLSAybmQgc2V0IG9mIHByZWRpY3RvcnMKIyB2YXJfMXBjXzIwMTZfZ2xvYl9ldGYgPSBjYXZfc2ltdWwoYygiSlhJIiwgIktYSSIsICJJWEoiLCAiSVhQIiwgIklYTiIsICJSWEkiLCAiRVhJIiwgIklYRyIsICJNWEkiLCAiSVhDIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAxMi0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTYtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSAxMCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCwgdGF1ID0gMC4wMSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfZ2xvYl9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfMXBjXzIwMTZfZ2xvYl9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xcGNfMjAxNl91c2V0ZltbMV1dKQoKIyB2YXJfNXBjXzIwMTZfZ2xvYl9ldGYgPSBjYXZfc2ltdWwoYygiSlhJIiwgIktYSSIsICJJWEoiLCAiSVhQIiwgIklYTiIsICJSWEkiLCAiRVhJIiwgIklYRyIsICJNWEkiLCAiSVhDIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAxMi0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTYtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSAxMCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjA1LCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9nbG9iX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl81cGNfMjAxNl9nbG9iX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzVwY18yMDE2X3VzZXRmW1sxXV0pCgojIHZhcl8xMHBjXzIwMTZfZ2xvYl9ldGYgPSBjYXZfc2ltdWwoYygiSlhJIiwgIktYSSIsICJJWEoiLCAiSVhQIiwgIklYTiIsICJSWEkiLCAiRVhJIiwgIklYRyIsICJNWEkiLCAiSVhDIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAxMi0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTYtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSAxMCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9nbG9iX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xMHBjXzIwMTZfZ2xvYl9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xMHBjXzIwMTZfdXNldGZbWzFdXSkKYGBgCgojIyMgQ29tbW9kaXR5IEVURnMKCmBgYHtyfQojIDElLCA1JSwgMTAlIFZhUiAtIDIwMTYgLSAzcmQgc2V0IG9mIHByZWRpY3RvcnMKIyB2YXJfMXBjXzIwMTZfY29tbV9ldGYgPSBjYXZfc2ltdWwoYygiREJBIiwgIkRCQyIsICJEQkUiLCAiREJCIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAxMi0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTYtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA0LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLCB0YXUgPSAwLjAxLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9jb21tX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xcGNfMjAxNl9jb21tX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzFwY18yMDE2X3VzZXRmW1sxXV0pCgojIHZhcl81cGNfMjAxNl9jb21tX2V0ZiA9IGNhdl9zaW11bChjKCJEQkEiLCAiREJDIiwgIkRCRSIsICJEQkIiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDEyLTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxNi0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDQsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsdGF1ID0gMC4wNSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfY29tbV9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfNXBjXzIwMTZfY29tbV9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl81cGNfMjAxNl91c2V0ZltbMV1dKQoKIyB2YXJfMTBwY18yMDE2X2NvbW1fZXRmID0gY2F2X3NpbXVsKGMoIkRCQSIsICJEQkMiLCAiREJFIiwgIkRCQiIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMTItMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDE2LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gNCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjEwLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9jb21tX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xMHBjXzIwMTZfY29tbV9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xMHBjXzIwMTZfdXNldGZbWzFdXSkKYGBgCgojIyMgQm9uZCBFVEZzCgpgYGB7cn0KIyBDYWxsIHRoZSBhYm92ZSBmdW5jdGlvbgp2MV8yMDE2X2JvbmRldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9ib25kX0VURl9ydW5zLyIsInZhcl8xcGNfMjAxNl9ib25kX2V0Zi5jc3YiLCAwLjAxKQp2NV8yMDE2X2JvbmRldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9ib25kX0VURl9ydW5zLyIsInZhcl81cGNfMjAxNl9ib25kX2V0Zi5jc3YiLCAwLjA1KQp2MTBfMjAxNl9ib25kZXRmID0gdmFyX2lucHV0X2Rpc3AoIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYm9uZF9FVEZfcnVucy8iLCJ2YXJfMTBwY18yMDE2X2JvbmRfZXRmLmNzdiIsIDAuMTApCmBgYAoKYGBge3J9CiMgaVNoYXJlcyAxLTMgWWVhciBUcmVhc3VyeSBCb25kIEZ1bmQgKFNIWSkKIyBpU2hhcmVzIDctMTAgWWVhciBUcmVhc3VyeSBCb25kIEZ1bmQgKElFRikKIyBpU2hhcmVzIDIwKyBZZWFyIFRyZWFzdXJ5IEJvbmQgRnVuZCAoVExUKQojIGlTaGFyZXMgaUJveHggJCBJbnZlc3RtZW50IEdyYWRlIENvcnBvcmF0ZSBCb25kIEVURiAoTFFEKQoKIyAxJSwgNSUsIDEwJSBWYVIgLSAyMDE2IC0gNHRoIHNldCBvZiBwcmVkaWN0b3JzCiMgdmFyXzFwY18yMDE2X2JvbmRfZXRmID0gY2F2X3NpbXVsKGMoIlNIWSIsICJJRUYiLCAiVExUIiwgIkxRRCIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMTItMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDE2LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gNCwgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCwgdGF1ID0gMC4wMSwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYm9uZF9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfMXBjXzIwMTZfYm9uZF9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xcGNfMjAxNl91c2V0ZltbMV1dKQoKIyB2YXJfNXBjXzIwMTZfYm9uZF9ldGYgPSBjYXZfc2ltdWwoYygiU0hZIiwgIklFRiIsICJUTFQiLCAiTFFEIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAxMi0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTYtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSA0LCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLHRhdSA9IDAuMDUsIHByaW50X21kbCA9IDEsIHByaW50X21wID0gMSwgcGF0aCA9ICIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2JvbmRfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzVwY18yMDE2X2JvbmRfZXRmLmNzdiIsIHV2X2xpc3QgPSB2YXJfNXBjXzIwMTZfdXNldGZbWzFdXSkKCiMgdmFyXzEwcGNfMjAxNl9ib25kX2V0ZiA9IGNhdl9zaW11bChjKCJTSFkiLCAiSUVGIiwgIlRMVCIsICJMUUQiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDEyLTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxNi0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDQsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsdGF1ID0gMC4xMCwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYm9uZF9FVEZfcnVucy8iLCBmaWxlbmFtZSA9ICJ2YXJfMTBwY18yMDE2X2JvbmRfZXRmLmNzdiIsIHV2X2xpc3QgPSB2YXJfMTBwY18yMDE2X3VzZXRmW1sxXV0pCmBgYAoKIyMjIEFsbCBFVEZzCgpgYGB7cn0KIyBDYWxsIHRoZSBhYm92ZSBmdW5jdGlvbgp2MV8yMDE2X2FsbGV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2FsbF9FVEZfcnVucy8iLCJ2YXJfMXBjXzIwMTZfYWxsX2V0Zi5jc3YiLCAwLjAxKQp2NV8yMDE2X2FsbGV0ZiA9IHZhcl9pbnB1dF9kaXNwKCIvVXNlcnMvc3RldmVubW9lbi9Eb2N1bWVudHMvR2l0SHViL0NBVmlhUl9NU190aGVzaXMvRGF0YV9FeHBvcnQvU1BZX2FsbF9FVEZfcnVucy8iLCJ2YXJfNXBjXzIwMTZfYWxsX2V0Zi5jc3YiLCAwLjA1KQp2MTBfMjAxNl9hbGxldGYgPSB2YXJfaW5wdXRfZGlzcCgiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9hbGxfRVRGX3J1bnMvIiwidmFyXzEwcGNfMjAxNl9hbGxfZXRmLmNzdiIsIDAuMTApCmBgYAoKYGBge3J9CiMgMSUsIDUlLCAxMCUgVmFSIC0gMjAxNiAtIDV0aCBzZXQgb2YgcHJlZGljdG9ycwojIHZhcl8xcGNfMjAxNl9hbGxfZXRmID0gY2F2X3NpbXVsKGMoIlhMVSIsICJYTFAiLCAiWExWIiwgIlhMSyIsICJYTFkiLCAiWExJIiwgIlhMRiIsICJYTEIiLCAiWExFIiwgIkpYSSIsICJLWEkiLCAiSVhKIiwgIklYUCIsICJJWE4iLCAiUlhJIiwgIkVYSSIsICJJWEciLCAiTVhJIiwgIklYQyIsICJTSFkiLCAiSUVGIiwgIlRMVCIsICJMUUQiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDEyLTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAxNi0xMi0zMSIsIG52YWwgPSAyNTAsIG50ZXN0ID0gMjUwLCBsb3dfbSA9IDEsIGhpZ2hfbSA9IDIzLCBsb3dfcCA9IDEsIGhpZ2hfcCA9IDEwLCB0YXUgPSAwLjAxLCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9hbGxfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzFwY18yMDE2X2FsbF9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl8xcGNfMjAxNl91c2V0ZltbMV1dKQoKIyB2YXJfNXBjXzIwMTZfYWxsX2V0ZiA9IGNhdl9zaW11bChjKCJYTFUiLCAiWExQIiwgIlhMViIsICJYTEsiLCAiWExZIiwgIlhMSSIsICJYTEYiLCAiWExCIiwgIlhMRSIsICJKWEkiLCAiS1hJIiwgIklYSiIsICJJWFAiLCAiSVhOIiwgIlJYSSIsICJFWEkiLCAiSVhHIiwgIk1YSSIsICJJWEMiLCAiU0hZIiwgIklFRiIsICJUTFQiLCAiTFFEIiksIHJlc3BfdmFyID0gIlNQWSIsIHN0YXJ0X2RhdGUgPSAiMjAxMi0wMS0wMSIsIGVuZF9kYXRlID0gIjIwMTYtMTItMzEiLCBudmFsID0gMjUwLCBudGVzdCA9IDI1MCwgbG93X20gPSAxLCBoaWdoX20gPSAyMywgbG93X3AgPSAxLCBoaWdoX3AgPSAxMCx0YXUgPSAwLjA1LCBwcmludF9tZGwgPSAxLCBwcmludF9tcCA9IDEsIHBhdGggPSAiL1VzZXJzL3N0ZXZlbm1vZW4vRG9jdW1lbnRzL0dpdEh1Yi9DQVZpYVJfTVNfdGhlc2lzL0RhdGFfRXhwb3J0L1NQWV9hbGxfRVRGX3J1bnMvIiwgZmlsZW5hbWUgPSAidmFyXzVwY18yMDE2X2FsbF9ldGYuY3N2IiwgdXZfbGlzdCA9IHZhcl81cGNfMjAxNl91c2V0ZltbMV1dKQoKIyB2YXJfMTBwY18yMDE2X2FsbF9ldGYgPSBjYXZfc2ltdWwoYygiWExVIiwgIlhMUCIsICJYTFYiLCAiWExLIiwgIlhMWSIsICJYTEkiLCAiWExGIiwgIlhMQiIsICJYTEUiLCAiSlhJIiwgIktYSSIsICJJWEoiLCAiSVhQIiwgIklYTiIsICJSWEkiLCAiRVhJIiwgIklYRyIsICJNWEkiLCAiSVhDIiwgIlNIWSIsICJJRUYiLCAiVExUIiwgIkxRRCIpLCByZXNwX3ZhciA9ICJTUFkiLCBzdGFydF9kYXRlID0gIjIwMTItMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDE2LTEyLTMxIiwgbnZhbCA9IDI1MCwgbnRlc3QgPSAyNTAsIGxvd19tID0gMSwgaGlnaF9tID0gMjMsIGxvd19wID0gMSwgaGlnaF9wID0gMTAsdGF1ID0gMC4xMCwgcHJpbnRfbWRsID0gMSwgcHJpbnRfbXAgPSAxLCBwYXRoID0gIi9Vc2Vycy9zdGV2ZW5tb2VuL0RvY3VtZW50cy9HaXRIdWIvQ0FWaWFSX01TX3RoZXNpcy9EYXRhX0V4cG9ydC9TUFlfYWxsX0VURl9ydW5zLyIsIGZpbGVuYW1lID0gInZhcl8xMHBjXzIwMTZfYWxsX2V0Zi5jc3YiLCB1dl9saXN0ID0gdmFyXzEwcGNfMjAxNl91c2V0ZltbMV1dKQpgYGAKCiMgSlVOSyBDT0RFCgpQcm9ibGVtIHNvbHZpbmcgb24gNC4yNS4yMDIwIHRvIHNlZSB3aHkgY29tbW9kaXRpZXMgRVRGcyBjb2RlIGhhZCBhIHByb2JsZW0uCgpgYGB7cn0KIyBjb21tX2RmID0gZGlmZl9pbmRleF9kZihjKCJEQkEiLCAiREJDIiwgIkRCRSIsICJEQkIiKSwgcmVzcF92YXIgPSAiU1BZIiwgc3RhcnRfZGF0ZSA9ICIyMDA0LTAxLTAxIiwgZW5kX2RhdGUgPSAiMjAwOC0xMi0zMSIsIGxhZ19wcmVkID0gMSkKIyBoZWFkKGNvbW1fZGYpCiMgcGNfZGYgPSBwY19kaWZmX2luZGV4KGRmKQpgYGAK